perm filename DESCR.RLL[RLL,DBL] blob
sn#642970 filedate 1982-02-13 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00019 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 RLL TALK
C00005 00003 Add/Change to memo, next iteration:
C00009 00004 Short description (for AAAI Article)
C00015 00005 Version of Short PCohen rewrote (June 1980) [Taken from previous page]
C00018 00006 Mailed to NII (LENAT/CC) 18:50 26-June
C00029 00007 Mailed to CSD.NII@SCORE 15:41 3-July
C00041 00008 Received from NII 7-July (essentially final form)
C00051 00009 Sent to DBL fr NLM report - 10 April 1981
C00064 00010 Comparison to Editors
C00066 00011 Language metaphor
C00070 00012 Ref:
C00073 00013 ∂4 Apr 1981 1605-PST CSD.GENESERETH mrs report
C00084 00014 ∂ 14 Jul 1981 2254-PDT KAPLAN at SRI-AI Origins of MRS
C00091 00015 [RLL Section of BES Book - Original - sent to DBL, thence to Waterman]
C00140 00016 [My version, after fix up (after Don, after DBL,from me)]
C00207 00017 [DBL's version, from last page]
C00279 00018 RLL subChapter in BES book
C00301 00019 A list of those additional values which get passed to
C00313 ENDMK
C⊗;
RLL TALK
Hillel metaphor:
"Tell me what's in the Torah, while I stand on one foot."
other fellow -> go away
Hillel -> "Do not do ... " The rest is just example and ...
Similarly what is in RLL-1 is just simple, single idea:
Leave parts of the representation explicit, and modifiable --
using same formalism as what is conventionally called "data".
The rest of just implementation.
This talk will first provide motivation -- why this is a good idea, and
why and how it can, at all, work.
Then specifics of RLL-1 ...
<<Table with missing leg for Problem 1; Hammer and Nail for Soln (rep'n lang)>>
<<Broken cup for Problem 2; Glue for Soln (rep'n lang)>>
Let us pause here and ask why LISP is in such common usage --
what advantages does it have over, say, Fortran (well, we know why not
Fortran) over, say, Pascal or the other "good" (structured) languages?
Answer is clear - Lisp is flexible and adaptable to new situations.
How does this happen: LISP code is identical, in form, to the data
it can use -- they are all S-Expressions. And LISP knows how to deal
with S-expressions in general, and hence can modify code with the
same ease as it can manipulate data in general.
Add/Change to memo, next iteration:
0. Page numbers - there should be a blank page after the title.
1. Glossary:
Language, Representation, Rep'n Language, Semantics
rll, RLL-1,
Slot Type, slot, unit, proposition, class of units, typical member, defaults
2. Example of RLL in action - perhaps spill problem (with its control process)
3. Move much of Section 4.3 (example of defining a new type of slot using HLDefn)
to Appendix A, so this just points there.
4. Further details
FAST-CACHE, FAST-GET for GetValue
Fast-Cache for CacheValue
Fast-Put for PutValue
Add on ways of handling quantification
[Maybe Mike's 13 facts]
Note at end that we are changing it so each unit (well, each KB) knows how to
access its slots, ...
Section numbers of Appendix F, about Functions, mislabeled (with D.2, ...)
"Developped"
Enough for PRIMER - i.e. minimal set of commands the user must know.
(Anne's suggestion)
Present FIRST as static interpreter, then go on to show how that might be changed.
Westfold, Steve [mispelled ...]
What is our purpose -- i.e.
Verification - RLL is a success when ____.
i) Given any new rep'n item, we can nod our head, realizing it could be done
ii) Others abandon their systems, realizing RLL's generality subsumes
such systems
In overview:
There is one major distinction between what the name r..l..l.. implies, and
what this system really is and does. When you modify some part of the
networks which describes/represents VLSI, you do NOT produce a new chip --
that is, the referent of these symbols is, of course, unchanged.
Changes to RLL-1, however, may have more far ranging effects -- the system
itself (that is, what these various symbols are actually describing) are
changed by commands to RLL-1. Like Dorian Grey, changing these symbols
causes their extensions to be altered.
Add: ref to Music Encycl, for Bach; also Dorian Grey
Precise Statement of our goals -
To develop a body of mechanisms (read language) in which one can
represent the components of a RL, and their interactions.
(Components include:
Slots, Inheritance Mechanism, Matchers, Verifiers, ?Semantics? )
Include hierarchy of existing pieces - taken from Klone, KRL, ...,
user can pick and choose
Note it is NOT required that we (explicitly) encode every possible rep'nal
construct -- our goal is to be able to develope such, readily.
Short description (for AAAI Article)
Implementing a complex AI task using begins by designing and building a
suitable representation language, in which to express the primitives of
this domain are easy to express and manipulate. (eg Parsing Trees for NL,
or Experiment Planning for MOLGEN.) The representation language used in
one domain is very seldom borrowed and adaptated to serve for some other
application -- the facilities which were desirable assets for the original
task become limitations elsewhere. Most such languages are therefore
built essentially from scratch -- a very time consuming (and, we believe,
avoidable) task.
Realizing this problem, we built a language in which the components of a
representation language could be described and built, and integrated into
a new representation language. This Representation Language Language,
RLL, provides a body of high level constructs which the user can apply
when designing his new language, [significantly speeding up this first
step.] RLL includes a large library of "representational pieces", e.g.
including the mode of inheritance used by the Examples link of the Units
package, or the A-Kind-Of type of slot associated with FRL. A novice user
can easily design his system by simply choosing the precise amalgamation
of these pieces he wishes. RLL is then responsible for meshing these
parts together, to form a coherent and working whole.
A more advanced user can exploit RLL's mechanisms for designing new parts
-- for example, a new inheritance, or new type of format permissable for a
slot. He could then use these in the system he is building. Once again,
the use of high level operators (such as Create-New-Inheritance-Like(
InstanceOf )) will vastly lessen the time required to construct this
desired language (compared to using, say, CAR, CDR and COND).
While several people have expressed interest in using RLL for their
applications, the system has only recently become sufficiently stable to
permit others to use it. It has been involved in two small, internal
tasks -- an adventure game simulation and an exploration into a more
complete self-description of various of its parts, using lower-level
primitives.
This research has forced us to examine a variety of issues -- ranging from
"what's in a language" concerns, which asks just what are the constituent
parts of a representation language, to epistomological questions, such as
how to handle intentional objects, or syntactic slots.
The details of how RLL was designed can be found in [Greiner 1980]; and
our proposals for solving many of the outstanding issues and questions are
in [Greiner and Lenat 1980] and [Genesereth and Lenat 1980]. Finally,
Dave Smith's demand paging system, CORLL, frees RLL from InterLisp's 256K
storage limitation.
Ref:
Genesereth, Micheal, and Lenat, Douglas B., "?", HPP Working Paper 80-?,
June 1980.
Greiner, Russell, "A Representation Language
Language", HPP Working Paer 80-9.
Greiner, Russell and Lenat, Douglas B., "A Representation Language
Language", submitted to this AAAI.
Smith, David E., "CORLL: A Demand Paging System for Units", HPP Working
Paper 80-8, June 1980.
Version of Short PCohen rewrote (June 1980) [Taken from previous page]
Implementing a complex AI task often begins by designing and
building a suitable representation language, in which the primitives
of the domain are easy to express and manipulate. The representation
language used in one domain is seldom borrowed and adapted to
another, because the facilities that were assets for one task become
limitations elsewhere. For this reason, most such languages are built
from scratch. The goal of the RLL effort is to reduce the amount of
time expended in building a representation language, by providing a
Representation Language Language, that is, a language that provides
the user with the components of many representation languages, and
with the ability to integrate them. RLL contains a large library of
"representational pieces", for example, the mode of inheritance used
by the Examples link of the Units package, or the A-Kind-Of type of
slot used in the MIT Frames Representation Language, FRL. A novice
user can easily design a language simply by picking an amalgamation
of pieces; RLL is responsible for meshing them together into a
coherent and working whole. A more advanced user can exploit RLL's
mechanisms for designing new parts, for example, a new mode of
inheritance, or a new type of format for a slot. He could then use
these in the system he is building. The use of high level operators
(e.g. "Create-New-Inheritance-Like(Instance-Of)") will greatly lessen
the time required to construct the desired language.
The RLL system is an ongoing effort. It has recently been
used in two small, internal tasks, an adventure game simulation and
an exploration into a more complete self-description of various of
its parts, using lower level primitives.
Mailed to NII (LENAT/CC) 18:50 26-June
Short description (for NII's HPP Brochure)
Motivation
Implementing a complex AI task usually begins by building such a
representation language. This language is designed to facilitate the
expression and manipulation of the primitives of this particular domain.
Experience has shown that the language used in one domain is seldom
borrowed and adaptated to serve for some other application: The
facilities which were desirable assets for the original task become
limitations elsewhere. Most such languages are built essentially from
scratch -- a very time consuming (and, we believe, avoidable) task.
Task Description
To speed up this first step, we built a language which "knows" about the
components of representation languages in general. This Representation
Language Language, RLL, provides an extendable collection of high level
operators and constructs, which can be used to describe and build such
components. It can then integrate these pieces into a functional, new
representation language. The user can use these functions to design his
"personal" language, capable of dealing with the problems associated with
his specfic domain and application.
RLL's open-ended means there were be an extendable set of possible
representational pieces. The current system knows about slots, modes of
inheritance, specification for functions, etc. (Much of the nomenclature,
such as Unit and Slot, is taken from the UNITS package, described
earlier.) (A sample mode of inheritance is the one associated with the
Examples link of the Units package, which corresponds to "element-of".)
Most operators are methods for defining or refining such pieces. For
example, RLL allows the user to define the "Parents" slot as the union of
the "Mother" and "Father" slots -- that is, (the value of) the "Parents"
slot of an individual is a list consisting of (the value of) that person's
"Mother" slot, and (the value of) his "Father" slot. This brief
definition alone is sufficient to tell RLL everything it needs to know
about this slot. RLL will automatically invalidate the value stored for
Fred's parents if his mother remarries; and know that only some units may
have a Parents slots (viz. those which had both a Mother and Father slot
-- i.e. people).
RLL includes a large library of pre-fabricated "representational pieces".
In fact, a novice can easily design his language by simply choosing the
precise amalgamation of these pieces he wishes. RLL will then mesh these
parts together, to form a coherent and working whole.
A more advanced user can exploit RLL's mechanisms for designing new parts.
The "Father" example above illustrates the ease associated with defining a
new slot; designing a new inheritance, or new type of format is as easy.
As before, the host of high level operators considerably lessens the
complexity associated with constructing and integrating this new piece.
Using these parts (however they were derived,) as tools, the user can then
procede with his main task. If he later discovers limitations in this set
of facilities, he need only redesign the offending components. RLL's high
level operators make such modifications easy to perform; furthermore, RLL
will automatically perform any necessary reformatting of the existing data
to conform to this new, just defined set of conventions.
Current Applications
While several people have expressed interest in using RLL for their
applications, the system has only recently become sufficiently stable to
permit others to use it. It has been involved in two small, internal
tasks -- an adventure game simulation and an exploration into a more
complete self-description of various of its parts, using lower-level
primitives.
An brief overview of RLL's goals can be found in [Greiner & Lenat]. This
is expanded in [Greiner 1980], which illustrating many additional aspects
of RLL's design and implementation. Finally, an important stand-alone
submodule of RLL is its demand paging system, CORLL, which frees RLL from
InterLisp's 256K storage limitation. (See [Smith 1980].)
Ref:
Greiner, Russell, "A Representation Language Language", HPP Working Paper
80-9, June 1980.
Greiner, Russell and Lenat, Douglas B., "A Representation Language
Language", AAAI Conference, Stanford, 1980.
Smith, David E., "CORLL: A Demand Paging System for Units", HPP Working
Paper 80-8, June 1980.
∂Date: 27 Jun 1980 1442-PDT
From: Nii at SUMEX-AIM
Subject: Re: Short RLL Description
To: RDG at SU-AI
cc: lenat
In response to your message sent 26 Jun 1980 1850-PDT
Russ,
The piece you wrote is really nice and is much appreciated.
I'll go over it Doug to get his ok
penny
-------
∂Date: 3 Jul 1980 1119-PDT
From: CSD.NII at SU-SCORE
Subject: RLL article
To: csd.greiner at SU-SCORE, rdg at SU-AI
cc: csd.nii at SU-SCORE
I've fixed the first 2-3 paragraphs of the RLL article. It is
unprotected and is in my directory at SCORE (do not use the one
at Sumex) <csd.nii>broch.rll. We are fast reaching a deadline so
could you get it back to me as soon as possible.
penny
-------
∂Date: 6 Jul 1980 1403-PDT - Nii at SUMEX-AIM - Rll write-up
To: rdg at SU-AI
cc: nii, Lenat
Russ,
I did some text editing to the version you gave me to save time.
I don't believe I changed any meanings intended in the paper. Please
look is over and see if you are satisfied--it's in <nii>broch.rll@sumex.
Meta-comments
1. Try to avoid too many parenthetical remarks. They are reserved for
statements which can be skipped over. Either something is worth
saying or it isn't. I took out most of the parentheses and made them
into regular text.
2. Unnecesary uses of "this" and "that"'s. Since the text progression
is quite logical, I replaced most of them with "the" or repeated the
references.
3. Look out for parallel constructs--avoid split infinitives.
4. Use commas, ;, and -- appropriately.
Since English is my second language, I'm not the one to criticize other's
English. However, there are some heuristics that can be learned that
might make your writing task a little easier and smoother.
penny
-------
Mailed to NI@SUMEX (& LENAT/cc) 13:03 7-July
Penny,
That document seemed good. I have (only) a few suggsted modifications;
our words do seem to be converging. One more iteration? When?
Russ
Mailed to CSD.NII@SCORE 15:41 3-July
Motivation
RLL is a tool to facilitiate the building of expert programs quickly. It
is itself an expert program, whose domain of expertise is knowledge
representation.
Task Description
The standard first step taken in building an application program (in AI)
is the design and implementation of a language which will be used
represent the knowledge this program will use. Experience has shown that
the language developed in one application is seldom adaptated for use in
other programs. The features that were useful for the original problem
become limitations elsewhere. Thus, a specialized representation language
is redesigned and reimplemented for each application -- a very time
consuming task.
RLL (Representation Language Language) is designed to reduce the time
spent building such representation languages. It is a language which
"knows" about the components of representation languages in general. It
provides the user with an extendable collection of high level operators
and constructs which he can use to describe and build components of his
target language. After the user has specified the desirable features of
the target language, RLL integrates these components into a functional,
new representation language. In other words, a user can readily (and
rapidly) design a personalized language, exactly suited to the domain and
the application task at hand.
RLL's open-ended means there were be an extendable set of possible
representational pieces. The current system can deal with pieces such as
slots, modes of inheritance, and specification for functions. Slots
conform to the definition given in the UNITS package description,
appearing earlier. (In fact, RLL borrowed much of its nomenclature, as
well as software, from this system. [Footnote: One example is a
stand-alone submodule of RLL, which implements a demand paging system.
This frees RLL from InterLisp's 256K storage limitation. (See [Smith].])
UNITs also motivated an important mode of inheritance: the one associated
with its Examples link. (This relationship corresponds to set theory
notion of "element-of".) There is nothing in UNITS which corresponds to
our use of functional specification. We are currently exploring this
domain, which helps unify many outwardly diverse concepts, such as
processes, mechanisms, and slots.
The initial RLL system is itself a very versatile representation language.
For most tasks, the user can use it as he might any other representation
language. What distinguishes RLL is that the user is not forced to follow
the constraints imposed by this particular language; instead, he can mold
his copy of RLL to accomodate his particular task.
RLL derives this flexibility in two ways. First, RLL contains a large
library of largely independent, pre-fabricated "representational pieces".
For example, there are many (mutually incompatible) ways in which one can
associate facts with an object. One corresponds to UNIT's idea of a slot,
while another is to let each unit point the list of assertions in which it
is involves. (Consider how to represent "Fred is the Father of Mary".
Using slots, this means filling the "Father" slot of the unit Mary with
the value "Fred". In the second notation, the unit Mary would point to
the assertion "(Father Mary Fred)".) This first method, using explicit
slots, is "active" in the initial RLL system. If this proves
unsatifactory, a simple command will instruct RLL to switch to this second
system. From then on, (or, at least, until the user's next alterring
command,) this modified version of RLL will understand this different set
of instructions, and its reactions will follow this second convention.
Furthermore, RLL will automatically convert the user's existing data into
this new format.
To effectively use these varied components, RLL must "understand" what
each does, and how. This information allows RLL to mesh diverse parts
together, to form a coherent and working whole. As such, it should be
possible for the user to design a fairly arbitrary language by simply
choosing the precise amalgamation of these pieces he wishes; leaving to
RLL the responsibility, and headaches, of fitting them together.
Realizing this catalog of "chunks" will never be totally complete, RLL's
second approach towards generality are its collection of tools designed to
help the user fabricate new parts. These high-level operators can be used
to define a new component, (or type of component) or refine an existing
one.
For example, the user can define the "Parents" slot as the union of the
"Mother" and "Father" slots. That is, (the value of) the "Parents" slot
of an individual is a list consisting of (the values of) that person's
"Mother" and "Father" slots. This brief definition (Parent = Union(Mother
Father) ) is sufficient to tell RLL everything it needs to know about this
slot. RLL now knows to (automatically) invalidate the value stored for
Fred's parents if his mother remarries; and know that only some units may
have a Parents slots (viz. those which had both a Mother and Father slot
-- i.e. people).
Defining a new slot is trivial; designing a new inheritance, or new type
of format is as easy. The host of high-level operators considerably
lessens the complexity associated with constructing and integrating this
new piece.
These parts (however they were derived,) become the language the user can
use for his main task. If he later discovers limitations in this set of
facilities, he need only replace, or redesign the offending components.
RLL's collection of types of parts, and its high-level operators, make
either type of modification relatively simple. As shown above, RLL then
does the "busywork" -- such as reformatting the existing data to conform
to this new set of conventions.
Current Applications
While several people have expressed interest in using RLL for their
applications, the system has only recently become sufficiently stable to
permit others to use it. It has been involved in two small, internal
tasks -- an adventure game simulation and an exploration into a more
complete self-description of various of its parts, using lower-level
primitives.
An brief overview of RLL's goals can be found in [Greiner & Lenat]. This
is expanded in [Greiner], which illustrating many additional aspects of
RLL's design and implementation.
Ref:
Greiner, Russell, "A Representation Language Language", HPP Working Paper
80-9, July 1980.
Greiner, Russell and Lenat, Douglas B., "A Representation Language
Language", AAAI Conference, August 1980, Stanford.
Smith, David E., "CORLL: A Demand Paging System for Units", HPP Working
Paper 80-8, July 1980.
Received from NII 7-July (essentially final form)
RLL
Motivation
RLL is a tool to facilitiate the building of expert programs
quickly. It is itself an expert program, whose domain of expertise
is knowledge representation.
Task Description
The standard first step taken in building an application
program in AI is the design and implementation of a language that
(in which to)
represents the knowledge the program will use. Experience has shown
that the language developed in one application is seldom adaptated
for use in other programs. The features that were useful for the
original problem become limitations elsewhere. Thus, a specialized
representation language is redesigned and reimplemented for each
application -- a very time consuming task.
RLL (Representation Language Language) is designed to reduce
the time spent building such representation languages. It is a
language which "knows" about the components of representation
languages in general. It provides the user with an extendable
collection of high level operators and constructs which he can use to
describe and build components of his target language. After the user
has specified the desirable features of the target language, RLL
integrates these components into a functional, new representation
language. In other words, a user can readily and rapidly design a
personalized language, exactly suited to the domain and the
application task at hand.
RLL is an open-ended language in which the user can add pieces
of language not provided in RLL's standard repetoir. Currently RLL
can deal with pieces such as slots, modes of inheritance, and
specification of functions. Slots conform to the definition given in
the UNITS package (see page ). In fact, RLL borrowed much of its
nomenclature, as well as software, from UNITS. For example, it uses
one of UNITS main mode of inheritance, the Example link. This
inheritance relationship corresponds to set theory notion of
"element-of". However, there is nothing in UNITS which corresponds
to RLL's use of functional specification. This domain is currently
being explored, because it would help unify many outwardly diverse
concepts, such as processes, mechanisms, and slots.
The initial RLL system is itself a very versatile
representation language. For most tasks, the user can use it as he
might any other representation language. What distinguishes RLL is
that the user is not forced to follow the constraints imposed by a
particular language; instead, he can mold his copy of RLL to
accomodate his particular task.
RLL derives this flexibility in two ways. First, RLL
contains a large library of largely independent, pre-fabricated
"representational pieces". For example, there are many (mutually
incompatible) ways in which one can associate facts with an object.
One corresponds to UNIT's idea of a slot, while another is the use of
pointer to a list or relevant assertions. For example, consider how
to represent "Fred is the Father of Mary". Using slots, "Father"
slot of the unit Mary would be filled with the value "Fred". Using
links, the unit Mary would point to the assertion "(Father Mary
Fred)". The first method, using explicit slots, is "active" in the
initial RLL system. If this proves unsatifactory, a simple command
will instruct RLL to switch to the second method. From then on,
(or, at least, until the user's next alterring command) the user
modified version of RLL will prevail. Furthermore, RLL will
automatically convert the user's existing data into the new format.
To effectively use the variety of components, RLL must
"understand" what each does, and how. This information allows RLL to
mesh diverse parts together to form a coherent and workable whole.
As such, it should be possible for the user to design a fairly
arbitrary language by simply choosing the precise amalgamation of the
pieces he needs, leaving to RLL the responsibility of fitting them
together.
Cataloging of possible components will never be totally
complete. RLL's second approach towards generality is its collection
of tools designed to help the user fabricate new parts. A set of
high-level operators are provided so that the user can define new
components or a type of components, or refine existing ones.
For example, the user can define the "Parents" slot as the
union of the "Mother" and "Father" slots. That is, the value of the
"Parents" slot of an individual is a list consisting of the values of
that person's "Mother" and "Father" slots. This brief definition,
Parent = Union(Mother Father), is sufficient to tell RLL everything it
needs to know about this slot. RLL now knows to automatically
invalidate the value stored for Fred's parents if his mother
remarries. Furthermore it knows that only some units may have a
Parents slots, i.e. those which have both a Mother and Father slots.
(Hence while each person or zebra should have parents, we should not
expect a VLSI chip to have such a slot, nor the unit representing the
class of functions.)
The language parts, however they were derived, become the
language the user can use for his task. If he later discovers
limitations in this set he need only replace or redesign the
offending components. RLL's collection of types of parts, and its
high-level operators, make modifications relatively simple. As shown
above, RLL then does the "busywork", such as reformatting the
existing data to conform to the set of new conventions.
Current Status
Although interests have been expressed in using RLL for a
variety of applications, the system has only recently become
sufficiently stable to permit others to use it. Thus far, it has
been used in two small internal tasks (an adventure game simulation
and an exploration into a more complete self-description of its
various parts using lower-level primitives,) and one still trivial
task, which dealt with oil spills (see Hayes-Roth et al.).
Sent to DBL fr NLM report - 10 April 1981
1. What else will be in this report - the unit's package?
2. What formatting system? SCRIBE?
3. Purpose of this report - to convince others of RLL's utility,
or demonstrate its abilities, or ...
In 1/2 page...
Feel free to subset this to the size you wish.
RLL
Motivation
RLL is a tool to facilitiate the building of expert programs
quickly. It is itself an expert program, whose domain of expertise
is knowledge representation.
Task Description
The standard first step taken in building an application
program in AI is the design and implementation of a language
in which to
represents the knowledge the program will use. Experience has shown
that the language developed in one application is seldom adaptated
for use in other programs -- the features that were useful for the
original problem become limitations elsewhere. Thus, a specialized
representation language is redesigned and reimplemented for each
application -- a very time consuming task.
RLL (Representation Language Language) is designed to reduce
the time spent building such representation languages. It is a
language which "knows" about the components of representation
languages in general. It provides the user with an extendable
collection of high level operators and constructs which he can use to
describe and build components of his target language. After the user
has specified the desirable features of the target language, RLL
integrates these components into a functional, new representation
language. In other words, a user can readily and rapidly design a
personalized language, exactly suited to the domain and the
application task at hand.
RLL is an open-ended language in which the user can add pieces
of language not provided in RLL's standard repetoir. Currently RLL
can deal with pieces such as slots, modes of inheritance, and
specification of functions. Slots conform to the definition given in
the UNITS package (see page ?). In fact, RLL borrowed much of its
nomenclature, as well as software, from UNITS. For example, it uses
one of UNITS main mode of inheritance, the Example link. This
inheritance relationship corresponds to set theory notion of
"element-of". However, there is nothing in UNITS which corresponds
to RLL's use of functional specification. This domain is currently
being explored, because it would help unify many outwardly diverse
concepts, such as processes, mechanisms, and slots.
The initial RLL system is itself a very versatile
representation language. For most tasks, the user can use it as he
might any other representation language. What distinguishes RLL is
that the user is not forced to follow the constraints imposed by a
particular language; instead, he can mold his copy of RLL to
accomodate his particular task.
RLL derives this flexibility in two ways. First, RLL
contains a large library of largely independent, pre-fabricated
"representational pieces". For example, there are many (mutually
incompatible) ways in which one can associate facts with an object.
One corresponds to UNIT's idea of a slot, while another is the use of
pointer to a list or relevant assertions. For example, consider how
to represent "Fred is the Father of Mary". Using slots, "Father"
slot of the unit Mary would be filled with the value "Fred". Using
links, the unit Mary would point to the assertion "(Father Mary
Fred)". The first method, using explicit slots, is "active" in the
initial RLL system. If this proves unsatifactory, a simple command
will instruct RLL to switch to the second method. From then on,
(or, at least, until the user's next alterring command) the user
modified version of RLL will prevail. Furthermore, RLL will
automatically convert the user's existing data into the new format.
To effectively use the variety of components, RLL must
"understand" what each does, and how. This information allows RLL to
mesh diverse parts together to form a coherent and workable whole.
As such, it should be possible for the user to design a fairly
arbitrary language by simply choosing the precise amalgamation of the
pieces he needs, leaving to RLL the responsibility of fitting them
together.
Cataloging of possible components will never be totally
complete. RLL's second approach towards generality is its collection
of tools designed to help the user fabricate new parts. A set of
high-level operators are provided so that the user can define new
components or a type of components, or refine existing ones.
For example, the user can define the "Parents" slot as the
union of the "Mother" and "Father" slots. That is, the value of the
"Parents" slot of an individual is a list consisting of the values of
that person's "Mother" and "Father" slots. This brief definition,
Parent = Union(Mother Father), is sufficient to tell RLL everything it
needs to know about this slot. RLL now knows to automatically
invalidate the value stored for Fred's parents if his mother
remarries. Furthermore it knows that only some units may have a
Parents slots, i.e. those which have both a Mother and Father slots.
(Hence while each person or zebra should have parents, we should not
expect a VLSI chip to have such a slot, nor the unit representing the
class of functions.)
The language parts, however they were derived, become the
language the user can use for his task. If he later discovers
limitations in this set he need only replace or redesign the
offending components. RLL's collection of types of parts, and its
high-level operators, make modifications relatively simple. As shown
above, RLL then does the "busywork", such as reformatting the
existing data to conform to the set of new conventions.
Current Status
Although interests have been expressed in using RLL for a
variety of applications, the system has only recently become
sufficiently stable to permit others to use it.
RLL's power can be seen in the variety of tasks in which it has been employed:
an adventure game simulation
an (internal) exploration towards a more complete self-description of its
various parts using lower-level primitives,
and a complex task in which RLL assumed the role
of expert-system builder, designing a program to
handle with oil spills (see Hayes-Roth et al.).
Bibliography
@InProceedings(RLL,
Key = "Greiner",
Author = "Greiner, Russell and Lenat, Douglas B.",
Title = "A Representation Language Language",
Booktitle = "1-AAAI",
Organization = SU,
Month = AUG, Year = 1980)
@TechReport(RLLa,
Key = "Greiner",
Author = "Greiner, Russell",
Title = "RLL-1: A Representation Language Language",
Number = "HPP-80-9",
Type = WP,
Institution = CSDSU,
Month = OCT, Year = 1980)
@TechReport(RLLb,
Key = "Greiner",
Author = "Greiner, Russell and Lenat, Douglas B.", Title = "Details of RLL-1",
Number = "HPP-80-23",
Type = WP,
Institution = CSDSU,
Month = OCT, Year = 1980)
@Manual(MRS,
Key = "Genesereth",
Author = "Genesereth, Micheal, Greiner, Russell, and Smith, David",
Title = "MRS Manual",
Note = "HPP Working Paper HPP-80-24", Month = DEC, Year = 1980)
@UnPublished(ExpertSystems,
Key = "Hayes-Roth",
Author = "Hayes-Roth, Frederick, Waterman, D. A. and Lenat, Douglas B.",
Title = "Designing Expert Systems", Note = "in construction")
@Manual(Units,
Key = "Smith",
Author = "Smith, Reid G. and Friedland, Peter",
Title = "Unit Package User's Guide",
Month = DEC, Year = 1980,
Note = "(HPP-80-28, and Defence Research Establishment Atlantic # 80/L)")
Comparison to Editors
Units :: Bravo
- Each does somethings very nicely, but cannot be extended
or modified -- interpreted designed for limited (and known to be
constrained) set of tasks.
KRL :: E
- Both try for universality, and both fail for the same reason:
The interpreter cannot be changed. Although other effects can be
simulated, that's as close as one can get.
ROSIE :: IBM's Editor
- Both were designed to be learned easily, and to be inextendable.
(Rosie's aims differ slightly from Unit's:
Rosie's purpose is for each of understanding; as opposed to
representational generality -- Units avoids these linguistic issues
for the most part.)
RLL-1 :: EMACS
- Both are very general languages, designed to be modified (and to
facilitate such modifications). Both establish some initial
conventions: RLL-1 has slots, EMACS is defined exclusively for screen
displays.
MRS :: TECO
- Both are bare-bones -- just enough to get started, and to be massaged
into the form desired.
(Note EMACS can be [in fact, was] written in TECO.)
Language metaphor
Representation Languages share many similiarities with natural languages,
such as English.
Both can be used to express facts about the world,
and in both cases, such descriptions are in terms of very high level, and "natural"
units.
Both are open-ended, and extendable --
new terms can be formed from old, using various established methods.
(New words can be created by adding a prefix to an existing word.
One can infer the meaning of "verbifying", as it applies a standard
method by verbifying to the noun, "verb".
Also, a word can take on a new, or extended meaning,
by using it in a new context.)
A language is more than just a dictionary of words;
it also includes a grammar which describes
how to use words to form higher level constructs,
such as Noun Phrase, Sentence, or Story.
RLL is like a very general purpose language,
which contains a large number of words, and a very encompassing grammar.
Many users will be able to use this, sans alterations.
What distinquishes RLL from most other representational languages is its
ability to change.
It can built not only new words,
but new and different grammars as well.
Most systems impose a fairly rigid set of conventions on what they can do,
and how.
The user has no choice but to conform to these standards,
which forces some applications into awkward contortions, if it is at all possible.
It achieves this generality by describing these each of notions precisely;
representing them within RLL's own formalisms
(much like reading an text on English, written in English).
These descriptions can then be used.
A user can combine the desired features
of several distinct languages to form
a new, specialized language, suited to his particular needs and goals.
Our eventual goal is to provide an entire catalog of these language
provides the ability to shift amoung languages -- to use German's
capability to string nouns together, and
Ref:
Extensible langauge, for describing extensibilites:
Davis, Randall, "Generalized procedure calling and content-directed invocation",
SIGPLAN Noices, Vol. 12, Nol 8, August 1977, pp. 45-54
Same general ideas - of bootstrapping down & down
Sandewall, Erik, "?", IJCAI 4
Smalltalk - idea of each unit knowing what to do
Fahlman "<10% not easy to represent, and require special fixes"
[see IJCAI-79, p.282 - in article re: AMORD]
Fox (IJCAI-79 282-4) - make things as explicit as possible - and declarative
Georgeff (IJCAI-79 330) - can add semantics to MetaRules easily
[use Cogn Econ to decide what needs to be recomputed]
Laubsh (IJCAI-79 516) [W German] {ATN w/Sem Nets} put concepts into Units,
with additional facts
Leitner, Henry H (Harvard) & Micheal W Freeman(Burroughs), (IJCAI-79 525)
store with "slot" what to do
Miller, G.A., E. Galanter, and K H Pribaum "Plans & the Structure of Behaviour,
New York: Holt, Rinehard & Winston, 1960. (see IJCAI-79 555)
"Major source of new plans is old plans."
Mostow & Hayes-Roth (IJCAI-79 601) - schema for heuristic search, w/slots for facts
IJCAI-79, 617 - AKO limiting - as meaning too many things, and all imprecisely
Semantics not pure (618)
"Prespecitifed useages of attached procedures is too restrictive"
(but they still stop shrt of real soln - ie they add own (deepter) conventions)
Hayes "Defense of Logic" - refers to building an interpreter for the interpreter
[see also Stefik's HPP-80-13, appearing in ?Artificial Intelligence? 1980]
∂4 Apr 1981 1605-PST CSD.GENESERETH mrs report
To: csd.greiner
I thought you might be interested in the progress report I gave Doug.
It includes an intro paragraph that reflects my best effort at
presenting a view of the coordination between the MRS and RLL efforts.
Look out! Here it comes.
Our research in knowledge representation has largely focussed
on the problem of giving a system knowledge of itself and the ability
to control its operation and modify its structure. Two outgrowths of
this research are the Modifiable Representation System MRS and the
Representation Language Language RLL. MRS is a minimal
self-descriptive system with the ability to reason about its own
structure and behavior. RLL is intended to have more extensive
knowledge about knowledge representation and thereby facilitate the
tailoring the system for partiular applications. MRS is much smaller
than RLL and is conceived of as the core from which the more
knowledgeable RLL will eventually be built. Superficially, MRS
differs from RLL in its external language (full predicate calculus
rather than "units") and in the specific capabilities available (e.g.
general backward chaining).
MRS - A Modifiable Representation System
As a knowledge representation system in its own right, MRS is
intended for use by AI researchers in building expert systems. It
offers a repertory of commands for asserting and retrieving
information, with varying degrees of inference. Information is
entered in a predicate calculus-like language of assertions and is
stored in either a propositional network or any of a variety of
specialized data representations (e.g. property lists, alists, bit
vectors). The initial system includes a vocabulary of concepts and
facts about logic, sets, mappings, arithmetic, and procedures.
What makes MRS special among knowledge representation systems
is its ability to deal with itself in the same way that it deals with
application domains (like geology and medicine). In MRS, the basic
representation is described within the representation itself, and the
inference techniques used in reasoning about application domains can
be applied to reasoning about the system. For example, MRS might use
facts about sets and sequences to determine whether a statement is
provable, or it might use facts about directed graphs to determine
that backward chaining is the most appropriate technique to use with
forward branching search spaces.
Because of MRS's formalism and meta-level vocabulary, it's
possible for a user to ask the system questions about itself; and,
since the system has a partial self-description, it can answer many of
these questions. More importantly, the system uses its own
description in carrying out each operation. The upshot is that the
user can affect MRS's behavior simply by modifying this description.
With a few simple statements, it is possible to select a new data
structure (e.g. property lists) or enable a different inference
algorithm (e.g. a general procedure like property inheritance or backward
chaining or a domain specific procedural attachment).
Furthermore, MRS is fully modifiable, i.e. it can be
converted into any LISP program by making assertions within its own
formalism (hence the name "Modifiable Representation System"). Most
knowledge representation systems were developed in the context of
particular applications, e.g. KRL and OWL in natural language and
Units in molecular biology. The problem is that what is good for one
application is usually not perfect for another. Although most systems
offer their users a number of options, there are often undesirable
design decisions that cannot be changed. In MRS modifiability is a
design goal, which is realized by the system's self-descriptive vocabulary
and its handling of changes in its own description.
Of course, bare Lisp is also fully modifiable. One important
difference is that MRS's language is more general than Lisp's, allowing its
user to assert arbitrary facts in the predicate calculus as well as defining
procedures. Furthermore, the transformation to other knowledge representation
systems is facilitated by the knowledge about knowledge representation built
into larger systems like RLL.
State of Implementation and Use
The core of MRS is fully implemented in DEC-20 Maclisp and
Interlisp and will soon be available in Franz Lisp on the Vax and
Interlisp on the Xerox Dolphin. A separate effort is underway to
implement the system in IBM's LISP370. MRS is being used in a variety
of research projects at Stanford, incuding the DART project (automated
diagnosis of computer hardware failures) and the Intelligent Agents
project (smart interface for computer operating systems). The system
has been exported for trial use by the Hewlett-Packard Co. and the
Rand Corp.
In its initial state, MRS uses a "propositional" representation
for storing information. The representation is fully indexed and has
a flexible context mechanism. Before carrying out any operation, the
system uses depth-first backward chaining at the meta-level to figure
out how to carry out the operation. Initially, application-level
deductions also use depth-first backward chaining.
In addition to the core system, several "plug-in" modules that
substantially increase the capability of MRS have been built. The
agenda module provides the system with the ability to do breadth-first
and best-first searches in addition to the default depth-first search.
The property list module allows the user to store facts in a
frame-like property list representation instead of the propositional
representation. The demon module allows the user to write general
"if-needed" and "if-removed" methods.
Future Work
Our primary effort in the continued development of MRS is being
devoted to the costruction of useful new "plug-in" modules and a few
extensions to the inference capabilities. The issues of primary concern
at this point include an implementation of default reasoning and reasoning
with equality.
At a more theoretical level, we are expanding the system's capabilities
to reason about its own structure and behavior. Specifically, we would
like to give the user the capability to specify "invariants" that the system
will automatically enforce. We would also like to implement a module that
can reason about the structure of the knowledge in particular application
areas in order to choose or design an appropriate representation.
⊗
∂ 14 Jul 1981 2254-PDT KAPLAN at SRI-AI Origins of MRS
To: csd.lenat at SU-SCORE, csd.Smith at SU-SCORE, csd.Greiner at SU-SCORE,
csd.grinberg at SU-SCORE
cc: kaplan at SRI-AI
Dear people:
I need a quick answer on the following -
For a document that has to go via net to DARPA on this Wed., I mention MRS
and note that it was developed at MIT (by Mike, I think as part of his thesis).
If this is incorrect, i.e. if he developed it here, I would appreciate it
if one of you could let me know for the sake of accuracy.
Thanks much,
Jerry
-------
---------------
∂TO KAPLAN@Sri-Ai (CC CSD.LENAT, CSD.SMITH, CSD.GRINBERG) 11:08 15-July
Everything you always wanted to know about MRS...and more
Jerry -
Nope. As part of his thesis work, Mike wrote a predicate-calculus
like representation language named DB. On coming to Stanford, he and others
(including Doug Lenat, Dave Smith Mark Stefik and myself)
began rethinking what should go into a representation language (rl);
in particular, focussing on what sorts of things
seemed wrong or incomplete about all the existing ones.
@BEGIN(Propoganda)
The basic problem was that these rls were knflexible,
and were almost impossible to extend to match new user's needs and wants.
Our conclusion was, in retrospect, both simple and obvious:
By design, a rl is built to represent facts about various domains --
eg menengitus, or mathematical equations -- in such a way that the user
can readily reason about such information.
Why not design a rl which could represent itself?
This way the user could probe about the underlying "rl interpreter"
to help understand the language;
furthermore, this transperancy could permit the user
to modify the language as he wishes, easily.
@END(Propoganda)
The first such language designed to represent such representation language
features was RLL (for Representation Language Language).
Unfortunately need forced this to be implemented too quickly, before many
important issues were resolved. This tension (build a good, usable language
with enough self-modifiability that our needs will be met; versus design and
build the ultimate language, spending as much time now as necessary to really
understand and resolve the wealth of time-consuming issues which would otherwise
plague future work) forced Mike to splinter off, and, with much help from
Dave and some heckling/assistance from yours truly, to begin work on that
pie-in-the-sky rl, MRS -- the Modifiable Representation System
(or Mike Russ Smith, or the next version after MISS, or ...).
The most modifiable aspect of this system, to date, has been its name -- which
has now evolved to stand for Multiple Representation System.
Various potentially relevant pseudo-documents include
HP-80-8 (CORLL, the system on which both RLL and MRS are built)
HPP-80-9 (basic RLL manual)
HPP-80-23 (extended RLL appendices)
HPP-80-24 (MRS introduction)
HPP-81-6 (first Multiple RS paper)
&
"Models and Metaphors" by MRG, and Doug & my "RLL - A Rep Lan Lan" papers,
in AAAI#1.
That answer your question?
Russ
∂15-Jul-81 1122 David E. Smith <CSD.SMITH at SU-SCORE> Re: Everything you always wanted to know about MRS...and more
To: RDG at SU-AI
cc: kaplan at SU-SCORE
I'd say that DB/ANALOG had considerably more impact on MRS than did RLL. -- de2
-------
∂15-Jul-81 1134 KAPLAN at SRI-AI Re: Everything you always wanted to know about MRS...and more
To: RDG at SU-AI
cc: csd.lenat at SU-SCORE, csd.smith at SU-SCORE, csd.grinberg at SU-SCORE
Thanks for the info, I have revised and sent the draft to reflect the
correct story.
Sorry for the confusion,
Jerry
-------
[RLL Section of BES Book - Original - sent to DBL, thence to Waterman]
(ca 10 July 1981)
RLL
2.2.8.1. Motivation
Expert systems are based on the observation that many problems
(such as medical diagnosis, or legal reasoning) are very
difficult. Due to both the sheer number of the constinuent
parts (eg court cases, or known laboratory techniques),
and to the intricacies of their interactions,
computers seem better able to cope with such tasks than humans.
So expert systems evolved, to help (human) domain expert manage
both the bulk and complexities associated with these chores.
Experience with such expert systems has lead to an interesting,
although usually overlooked, insight:
the programs which help design and implement
expert systems are themselves complex beasts.
Indeed, the domain of programming exhibits
the same types of complexities
that prompted computer scientists to build expert systems in the first place.
For example, one can use partial specification equally well
in any planning task, whether the domain be
designing molecular genetics experiments or constructing computer programs.
NEEDS WORK!!
2.2.8.2. Overview of RLL
This realization triggered RLL's development.
It is, first, a collection of tools which help
the KE to construct, use, and adapt an Expert System program.
In addition, it is itself a bona-fide expert system --
knowledgable in facts about programming in general, and its own subroutines
in particular.
This competency permits RLL to "understand" its internal inference procedures,
and provides the user with a tool for modifying these programs
to meet his specifications (rather than vice versa).
<<<< Begin >>>> ****** Is this needed ****** <<<< Begin >>>>
Every ES must have a "competence model" of its domain.
It is this knowledge which allows
that system to reason about the facts of its field.
(For exmple, MYCIN's "knowledge" of the facts about meningitus
is used to answer questions about the nature, cause
and effects of this disease.)
On the other hand, although MYCIN uses a backward chaining
inference engine to perform its deductions,
its "knowledge" of this process is limited to a weak "performance model"
-- MYCIN could not tell the user why it chose this particular control structure,
or indicate how exactly it works,
except by example.
While the domain of any Expert System Building program (ESBp) is
programming, few have a real "competence model" of this domain --
i.e. few have any "deep understanding" of the
programming constructs of the target programs they are building.
(EG while AGE can construct a Blackboard based reasoning system,
it cannot reason about such a system -- to answer questions about,
for example, its effeciencies; nor can it modify that BB model, to
handle, for example, a different type of rule.)
Like the other ESBps, the RLL system begins with a store of such constructs.
This class includes a non-trivial collection of types of slots, control
mech↓nisms, and inheritance schemes.
Each of these units is described in RLL's formalisms.
This specification is sufficiently "deep" that arbitrary ensembles
of these parts can be combined;
and it is this collection of parts which
forms the user's particular representation language.
However RLL was designed with the realization
that no single set of starting primitives could possibly satisfy
all of the users all of the time.
Hence RLL goes on to provide a number of tools,
which the user can use in constructing his own pieces --
for example, the user can create a new type of slot or inheritance procedure
by performing a simple modification to a "close" existing one.
<<<< omit this
RLL's competence model is essential at this point.
Many indirect ramifications may arise when
such a modification is performed, and the overall system must
be able to find all parts of the systems which may be affected by this change,
and update these pieces appropriately.
RLL's collection of facts about the field of programming
may be necessary ...
omit this >>>>
<<<< End >>>> ****** Is this needed ****** <<<< End >>>>
This permits it to "understand" what it is doing as it constructs the
target Expert System, using a reasoning process not unlike Tierasias's;
only more elaborate and encompassing. (Ie Tierasias had only a rudimentary
understanding of certain forms, within a small set of molds.
RLL can actually create new molds as necessary.)
RLL can create new modes of inference, with the same types of steps
a program like CASNET would use to incorporate a new
fact about a patient, or a new type of disease.
The next two subsections will indicate how RLL's flexibility aided us
in designing, building and updating the Oil Spill System we built, OSS.
Section 2.2.8.3 outlines the approach we followed in contructing OSS.
Notice that RLL allowed the specifics of the problem to guide the
nature and implementation of the final system
-- rather than force OSS into some particular formalism,
we designers were given great latitude in determining what
control structures to use, as well as the form of the data.
This permitted the system builders to make
effectively all of the important design decisions,
rather than be limited by the particular options which happened
to be included in the ESBp.
One of RLL's forte is its adaptability -- this carries over to the
programs it is used to construct.
Section 2.2.8.4, in listing RLL's major points, shows how easy
it was to modify OSS, both as we were building it,
and as we revised/upgraded it, after its "completion".
We next show some of RLL's main weaknesses,
both those inherent to this type of system, and those which
are only present in the current implementation.
The conclusion answers a few remaining question - such as RLL's historical
genesis, and how problems of efficiency are solved.
<<<<BELOW: THIS PART WAS EXCISED - it will be included in Rand report>>>>
2.2.8.3. Approach to Oil Spill Problem
We outline below the approach we followed in building OSS, a program
for handling (a subset of the problems associated with) inland
chemical spills.
Step 0: Determine what problem was to be solved.
(Note this step is unusual for KE tasks in general.
The particular task is usually fairly well defined
before the programme has even been contemplated.)
We decided OSS would concentrate on
solving the backtrack-to-source problem; but would include
a wide range of facts pertaining to this overall inland chemical spill situation.
Step 1: Decide what data should be represented.
We encoded as units facts ranging from very general statements about spills,
down to what pipe connected to which manhole in this installation.
Note that we had NOT decided yet how to represent these facts -- ie into
what set of hierarchies, and with what properties explicitly stored --
This is delayed until Step 3, after the basic control algorithm had been proposed.
(As AA texts will show, this is a good practice, as it avoids a premature
commitment to an awkward representation.
Note further that this is only possible in a system which
permits more than one structure for the data,
and more than one mode of inteference, such as RLL.)
In addition to the standard collections of individuals (eg Pipe#34), class of
such objects (eg AnyPipe, which refers to the set of all pipes) and the features
associated with such "set theoritical" objects,
we realized we would have to represent events -- general objects
which could be gradually refined. An example should help drive home this idea:
We may want to say general things about oil spilling into a body of water --
for example, that it causes a sheen.
We would prefer to place all such facts on one place,
eg the OilSpillingIntoWater unit, and know that every more specialized case,
eg oil spilling into the stream, will inherit such facts. (That is, that oil
will cause a sheen in the stream.)
So we would want the OilSpillingIntoStream unit to inherit everything
found in the more general OilSpillingIntoWater unit.
We could go on to describe
facts about OilFromPipe93SpillingIntoWOC,
in turn, can be further restricted into
MachineOilFromPipe93SpillingIntoWOCAfterOutFall93, (which can be
restricted to DayOldMachineOil#2FromPipe93'sFirstOutletSpillingIntoWOC-
AfterOutFall93onAug23.
Of course,
these units are not simply produced
arbitrarily -- only when you have something to say about such an
event will you create a gestalt to hold this information. If the fact
is general, it should go on a general event unit, which enables its
descendants to inherit these facts.
Anyway, the mechanism for handling this type of inheritance is distinct from
the more standard ElementOf or SubsetOf relations; and in RLL one can state
just what is expected of this relation precisely and explicitly.
Step 2: Decide on the Control/Inference Algorithms
To properly perform this step it is essential to analyze the characteristics
of the eventual system.
For example, the complete OSS is expected to perform a variety of different tasks
-- from determining the type of the spill to performing various
<remediation tasks>, such as notifying the authorities.
Another important characteristic of this job is the timeliness and ordering
of these tasks --
the importance of recording the name of first witness dwindles when
compared with telling him not to breathe the toxic fumes.
Hence determining the toxicity of the vapors
should be of tantamont importance,
especially when the leak might be near people.
A well structured agenda seemed ideally suited to these specifications.
(An additional plus was that
even this still immature RLL system already had this program construct.)
The agenda contains an ordered list of tasks, which are processed sequentially.
Each task is designed to performs a particular bitesize job.
For example, the goal of one task may be to determine the values
of some parameters, (e.g. the task MatType attempted to deduce
the type of material which had spilt,)
another may add other tasks to this agenda,
(for example, the task in charge of effecting the Countermeasures added
several new tasks to the agenda - one to notify the authorities, another to ...)
and a third type would print out instructions/requests to the user
(eg "go to Manhole #34 and tell me if you see oil").
Other kinds of tasks (which were not necessary for this particular domain)
could create a new concept,
or decide to rearrange the tasks on the current agenda,
in recognition of some new fact.
Executing a task meant collecting relevant rules, then ordering and firing
this list in sequence.
There are many types of rules, each charged with (attempting to) achieve a
different type of goal.
(In this sense they are similar to tasks, only in a smaller scale.)
Some rules employ a known technique (algorithm) to evaluate
the value of some attribute.
(For example, determining the toxicity of a given material by looking
it up in a table.)
Others may decide to add additional rules to this rule-set,
or propose adding a particular new task to the agenda.
Still others may suggest that the current task (in which this rules occurs)
be suspended, to await necessary new data.
(Note the flow of command is quite structured.
Each rule, task or agenda* can only effect its immediate surroundings.
More global changes are performing to sending messages to its overlord,
proposing this alteration.)
* Footnote: RLL (EURISKO) is capable of dealing with several agendae --
swapping among them as need arises.
This facility was one of many RLL features which were not needed
for this job.
We will discuss below how the rules themselves will be represented,
along with the benefits of this format.
<<<<ABOVE: THIS PART WAS EXCISED - it will be included in Rand report>>>>
Step 3: Decide how to represent the facts/procedures/rules...
3a) Once the overall inference mechanism has been determined
3b) Decide how to represent the control mechanism
Before we can describe the sort of decisions which are made at this
point, a brief digression is necessary -- to explain RLL's basic philosophy,
and how this permits us to decide on the representation to use.
(We'll tell you when the digression is over.)
RLL is based on the "To every thing, a unit" philosophy.
This uniform representation system extends beyond just encoding the
domain knowledge -- here facts about types of oil and connectivity of pipes.
Units are used to store facts (as well as the executable code) associated
with the representation itself -- such as the descriptions for each type of
slot, or the procedure used to process a given task.
*--------*--------*--------*--------*
M6-3
Isa: (AnyManhole)
FeedsInto: (M6-2)
M6-2
Isa: (AnyManhole)
FeedsFrom: (M6-3)
AnyManhole
Examples: (M6-2, M6-3, ...)
Description: This represents the class of all manholes.
*--------*--------*--------*--------*
RLL is (unfortunately) committed to using a semantic net based representation,
based on gesalts called "units",
whose attributes are defined with a set of property-value pairs*)
[* footnote: these properties are called Slots, for historical reasons.]
Within this minor constraint, RLL does provide great flexibility.
We show below that the information relevant to each type of slot is stored in
a unit.
The unit below shows that:
The value of x:FeedsInto must be a list of manholes, the only x for which
x:FeedsInto is defined is a manhole, and that if x:FeedsInto = y, then
y:FeedsFrom = x (i.e. FeedsInto:Inverse = FeedsFrom).
*--------*--------*--------*--------*
FeedsInto
Isa: (AnySlot)
Description: This slot maps from manholes to manholes.
Inverse: FeedsFrom
HighLevelDefn: (Composition OtherEnd ConnectedPipes)
Domain: Unit representing a manhole.
Format: SingleElements
Datatype: Unit repesenting a manhole.
ToCompute: (λ (u) [Find the pipe, P, to which this manhole connects.
See which pipe, p', to which this P is connected.
Return the manhole m, which is connected to
pipe p'.]
Note - the ToCompute of a slot indicates how to deduce its value -- i.e.
S:ToCompute is a function, F, whose value, (F u), is the value to fill
u:S.
*--------*--------*--------*--------*
It is important to realize that those facts shown above are not JUST a description
of the FeedsInto type of slot -- it really is used to define this slot.
If any of those slots were ever changed, the way this slot behaves would
be affected. For example, declaring FeedsInto:Format is a SetOfElements would
cause RLL to redefine each FeedsInto:ToCompute to return a singleton list
rather than a single atom (corresponding to that manhole,)
and to (retroactively) fix up each value of u:FeedsInto.
[If that value was empty, it would remain empty. Otherwise the single value
v would be changed into the list (v).]
Similarly, each data structure -- each rule, task, and agenda --
is stored as a unit.
This permits (facilitates) the data to dynamically altered during
the course of the computation, or through user input.
(IE one can use the same procedures to add in a new rule that are used
to add a new pipe, or new type of slot.)
Even the procedures of this system
-- the parts of the control structure outlined above --
are encoded in units.
As with parts of the repesentation, these facts are actually used as the
system is run.
For brevity, we will only address one of these chunks -- the rules.
Each rule has a number of obvious attributes.
First, the rule has to store the actual code which is to be executed.
The user is spared the task of enterring the
actual LISP expression to be run;
instead he provides a higher level specification of what this rule
is to do, and RLL "expands" this definition into that code.
There are several major advantages to
providing both high and low forms of a rule specification.
In addition to facilitating the creation of a new rules,
this higher level makes the nature of the rule easier to understand
and reason about, for both the user and RLL itself.
*--------*--------*--------*--------*
Rule#332
Isa: (AnyRule)
Description: Tell the user to hold his breath if the chemical is toxic.
IfPotentallyRelevant: (APPLY Toxic Chemical)
IfTrulyRelevant: (APPLY NearbyUser ChemicalHasSeepedTo)
ThenTellUser: "Do not breath this chemical!!"
ThenAddToAgenda: EmergencyProcedures
Priority: High
OnTask: ImminentDanger
ImminentDanger
Description: This task tries to find if the current situation is
dangerous; and if so, suggest solutions/fixes/alternatives.
Isa: (AnyTask)
RuleList: (Rule#332, ...)
EmergencyProcedures
Description: This task is called iff the current situation is dangerous;
and issues many quick-and-dirty orders.
Isa: (AnyTask)
RuleList: (Rule#981, ...)
-Note the rule above is what the user would type,
and not the actual running code which RLL would compute as needed.
*--------*--------*--------*--------*
Notice the code for this rule is scattered about, stored in several distinct
slots.
This permits different parts to be executed independently --
for example, allowing the quick IfPotentially check to run to all of wide
class of rules; and then running the more expensive IfTrulyRelevant part
only on that small subset which passed.
The THEN parts are also split up. Once the IF-parts have all passed, each
of those is, in sequence run.
Of course what we described above was the way the rule was evaluator, "by default"
- read that, unless the user has something else in mind.
Recall any user can readily modify that rule-evaluating procedure as well.
So, for example, the user may decide instead to execute the code implied by
the IfWorkingOnTask slot of a rule, or IfTodayIs, or any other set of slots.
(rather than the current IfPotentiallyRelevant and IfTrulyRelevant slots
now used.) Or he may decide to compose a single IF-Part, which ANDs together
all of these, and runs these at once. Similarly he may want the THEN parts
executed in a different order; or may have decided to only run those THEN parts
for which he has sufficient resources.
Note that this could not be done if each rule was simply a single piece
of compiled code.
We claimed above that it was easy to change the rule interpreter.
This is because that block of code is itself an RLL unit.
Like the rules, it is decomposed into nice sized chunks, which can
be independently modified.
One such hook is a list of slotnames which constitute
the IF part of a rule, together with a description of when that code should
be executed. Details of this, and other specifications, can be found in [Greiner].
Before leaving this rule description, there are several other
"declarative" facts stored in each rule.
One important slot is the average CPU time this rule has spent, for executing
its IF parts and THEN parts, respectively. This can be used for various
meta-reasoning tasks -- such as deciding whether to even consider this rule
in the future (ie did its bang justify its bucks).
Another field is the rule's author - be in human or another rule.
This can help decide who to credit/blame for good/bad rules; and this data
can help the overall system to improve its performance by relying more and more
on capable (that is, successful) rule writers.
Finally, the user himself can store any other type of information he wants --
these are just things which we feel may be useful types of statistics.
Similar mechanisms exist for processing agendae, or tasks, or other control
regimes. (For example a black board architecture, for other types of tasks.)
There are corresponding varieties of data structures - ways of extending tasks,
for instance.
Of course various inference schemes - most importantly an inheritance hierarchy -
is used to simplify data entry. A new rule structure can be entered by
copying the existing prototype, and changing those entries which are inappropriate.
Most properties are simply inherited from more general ideas -- here from
RLL's facts about rules in general. (In fact, for pedagogic reasons, we might
not even tell the novice user about RLL's extendability; or at least not until
he begins to complain about how awkward it is to encode this or that fact.
Until that time, he need never know anything more that a "behaviour description"
of the rule interpreter -- which is all he would ever know about the corresponding
evaluator in most other ESs.)
*-*-*-* Back to the plot *-*-*-*
The above description of rules, etc., was only to illustrate the type of decisions
one can make at this level. Here one can determine what sorts of executable slots
a rule can have, and what such slots "mean" -- that is, when that code should
be executed.
This is a further specification of the underlying type of algorithm
(here an Ordered Agenda Execution,) and is done as a seperate step, after
the overall idea had been determined.
Step 4: Run the system, and modify what has to be modified.
While (4a) "Test the neo-natal system" is standard to ESBps,
(4b) "Change those parts which should be changed" is not.
In RLL, all of the executable code is made explicit, and the user
is permitted to modify it to suit his design.
We saw in Step 3 some of tools RLL provides for such adaptations --
a high level specification language, and appropriate chunking of the knowledge.
There it was used for construction of parts -- but it can also be exploited
for retro-actively modifying existing parts.
As we saw, RLL's structure makes
changing the code as easy as altering any domain data
-- as the "program" used to test a rule's pre-condition is in the same format
as data about Oil#31, or any other bit of data used.
There are many levels of modifications permitted to data stored in RLL.
The simplest type of alteration pertains to domain data -- deciding that
Pipe#406 really joined Pipe#317, rather than Pipe#316 as you had thought.
This sort of fix could be performed in any ES.
But now suppose you realized that pipes could really join many pipes, rather
than just one. This would be difficult to say in many languages --
indeed the only solution in most might require throwing away that Connected
link and defining a totally new ConnectedS link. Even then all of the existing
data would have to be transfered, regrettably by hand.
Not so in RLL. As the example given above shows, this could be done automatically.
The actual control mechanism could be altered as well. In the initial simple
OSS system we simply pre-assigned a set of rules to each task.
Another approach would be to require each task to first gather those rules
it might need, and then fire those. This required changing the basic task
processor, by simply putting in that "initialization" proceudure.
(Fortunately this was simply adding in a pre-existing known routine.)
Nonetheless, this fix was quite easy to make.
The initial implementation wasn't worried about time or space problems.
Each task ran until it thought it was done, and then the task which was
next in importance started up. We then decided this was sub-optimal -- as
some tasks might become gradually less important, to where some sub-part of
another task would be more relevant.
So we changed the task-interpreter again, to suspend tasks after some length
of time. Another fix could (but wasn't made) in the Agenda-processor to
only consider tasks which could be achieved in x units of time.
(This too would be easy - by adjusting the weight function, used to evaluator
the worth of each task. The ordering of the agenda is determined by this measure.)
There were several other things which we considered but decided not to change:
One was to use more general types of rules -- where each rule could dictate
how to fire it, in each given situation -- eg when gathering rules, or testing
preconditions, or .... This would permit IfThenElse types of rules,
or even "rules" which were simply a procedure
-- perhaps a call to a Fortran program.
2.2.8.4. RLL's Strengths and Weaknesses
WINS
Throughout this report we have pushed RLL's strengths -- basically these
all derive from RLL's "competence model" of programming in general,
and of the data structures and algorithms it uses in particular.
Not mentioned was its capability to ignore InterLisp's 256K storage
maximum, using a demand paging algorithm [CORLL], and its basic Lisp support --
providing advantages like spelling correction, and inline editors.
From the above descriptions imply that RLL is actually "executing" high level
specifications of various control algorithms.
Were this true, RLL would have sacraficed any hope for speed and
(time-)efficiency for the sake of flexibility.
That is NOT the case. While RLL does preserve these high level descriptions
definitions, it ALSO stores what these forms "compile" into -- and it
is that latter body of code which is actually run.
Much of RLL boot-strapping code is devoted to preserving such interrelationships --
so that any change to a high level form marks the (formerly-)corresponding
executable code as invalid. On demand (that is, the next time that code
is needed,) RLL will expand that new high level definition into runnable
code; and store these low level forms so they will accessed speedily
next time the code is needed.
Returning now to the question of efficiency, we see that RLL's code
can be arbitrarily fast.
Rather than "interpret" the high level descriptions, RLL first "compiles"
these into efficient forms, and runs this faster code.
This costs only a constant overhead -- for the one time charge of
expanding that terse description. From there on the code can be
arbitrarily efficient.
Basically RLL has paid for its flexibility in terms of space -- to maintain
the different versions of the code -- and not in time.
More details on how these multiple versions are maintained, used and cached
can be found in [CogEco].
LOSSES
RLL's biggest problem, at this stage of its development, is its immaturity.
By design, it will continuously incorporate new facts about control structures,
forms of representation and modes of inheritance.
However, OSS was built way too early in this ongoing design process.
For example, RLL had never encountered a Solvable Problem before --
all of its previous work had been directed towards AM-like searches --
things which never terminal with a final verdict (ie RLL knew about tasks
like "Find examples of primes", but not about things like "What is the source
of the spill").
Another big weakness, which also stemmed from its youth, was its lack of
a user front end. A trivial example involves the way we were forced to
enter the code -- everything was in a LISPy (GetValue 'Material
'Name), rather than a nicer "Material's name".
At a deeper level, RLL did not yet have any notion of context --
this forced us designers to explicitly type (continuing the above example)
"Material name" rather than the (sufficient) "name".
A good front end could have aided in the design of this system, by suggesting
appropriate data structures and algorithms as we went. This too was missing.
The final major fault seems almost paradoxical:
it was RLL's total adaptability.
Too much freedom, we found, forced us to spend considerable time
deciding which really was the best.
This time, of course, was not ill-spent; the final OSS is certainly
better than any comparable system which forced out hand at each step,
molding out final code to match its limited set of components.
However, any such external constaints would have
narrowed down our search, and helped us finish the system in the
four days we were allotted.
Once again this type of problem could have been alleviated in a more
mature system, which included a competent front end which would have
served as "gentle guide" during this building process.
2.2.8.5. Conclusion
We will conclude win a perspective of RLL -- in terms of its past, its
current status, and our long term plans.
A year ago, RLL began as a two week project to build a representation language on
which the EURISKO system would be built.
We soon realized many non-trivial research issues had to be addressed before
such a general, "self-encoding" language could be constructed.
(We eventually abandoned the quest for this ultimate language, satisfying
ourselves with the generality which was possible within a limited set of
constraints. The more theoritical aspects of this rll work was taken up
by other members of the HPP community; and their next step is described in
[MRS].)
The current system plays a necessary boot-strapping role -- certain parts
of the system must be present, as these are used to fill in other parts.
(For example, the code which is used to expand high level definitions must
be present -- or at least enough of it to generate the rest of it.)
The initial control mechanism was the one needed for the EURISKO work --
which was an Agenda structure. OSS used a minor variant of this system.
In the long run we will actually build RLL into the MRS system -- viewing
each of the seperate decomposable parts of this systems as an MRS module,
which can be individually or collectively plugged in (ie activated).
Using MRS as a Lingua Franca, RLL will be able to absorb a large corpus
of knowledge and examples from a multitude of users -- the MRS community.
Each of these other modules will hold facts about a particular domain, or
part of that domain -- eg Medical tutoring, VLSI design, or planning experiments
in the field of Genetics.
For its part,
These RLL-based MRS modules will store facts about certain types of representations,
together with their major applications.
Important in this list will be expertise about expertise.
It is this knowledge which will enable RLL to fashion new ESs with greater
efficient and accuracy.
BOTTOM LINE
While other ESBp systems have proven expedient for tackling particular problems
in particular domains, we feel such systems will always be limited
in the scope of problems they can solve.
We feel this problem is intrinsic to such programs, at least until
they, like the human programmers they are trying to emulate,
are capable of a crude understanding the code they are composing at something
more than the superficial level now attains.
RLL was written with the goal of attaining this necessary
undertanding.
[My version, after fix up (after Don, after DBL,from me)]
∂ Monday, 6 Jul 1981 15:33-PDT Re: tools chap
To: CSD.LENAT at SU-SCORE
Cc: don at RAND-UNIX
In-reply-to: Your message of 25 Jun 1981 1502-PDT.
From: don at RAND-UNIX
Doug: I reorganized your section for you -- the material I pulled out will
go into the Rand Report. Naturally, you will have to modify the content of
the chapter yourself. It still needs a bit of work to smooth it out and
change the emphasis from a description of the SPILL program to a
description of RLL using the SPILL problem to illustrate important points.
I need your revised chapter as soon as possible (yesterday) so I can send
the publishers we are considering the draft of the book they have been so
patiently awaiting. We will not send them anything on the metacognition
section since (I assume) it won't be ready for some time.
I put a copy of the tools chapter draft into the mail for you today. It
may help to see how the other people have organized their sections of
the chapter.
Regards,
Don
------------------------------------
(16 July 1981)
2.4.1 RLL
Expert systems (ESs) are based on the observation that many problems
(such as medical diagnosis, or legal reasoning) are very
difficult. Due to both the sheer number of the constinuent
parts (eg court cases, or known laboratory techniques),
and to the intricacies of their interactions,
computers seem better able to cope with such tasks than humans.
So expert systems evolved, to help (human) domain expert manage
both the bulk and complexities associated with these chores.
Experience with such expert systems has lead to an interesting,
although usually overlooked, insight:
the programs which help design and implement
expert systems are themselves complex beasts.
Indeed, the domain of programming exhibits
the same types of complexities
that prompted computer scientists to build expert systems in the first place.
For example, one can use partial specification equally well
in any planning task, whether the domain be
designing molecular genetics experiments or constructing computer programs.
This realization triggered RLL's development.
It is, first, a collection of tools which help
the KE to construct, use, and adapt an Expert System program.
In addition, it is itself a bona-fide expert system --
knowledgable in facts about programming in general, and its own subroutines
in particular.
This competency permits RLL to "understand" its internal inference procedures,
and provides the user with a tool for modifying these programs
to meet his specifications (rather than vice versa).
This section will quickly overview this RLL system, taking examples
from our experience coding up OSS -- the Oil Spill System.
As a secondary goal (in addition to describing RLL,) we hope to
express our conviction that (i) a self-encoded system -- one which can
begin to "understand" its own operations to where it can assist in
performing such modifications --
is immensely worthwhile, especially in the long run;
and (ii) that the price of this capability is really not that great.
!2.4.1.1 Overview of RLL
Every ES must have some "competence" of its domain.
It is this knowledge which allows
that system to reason about the facts of its field.
(For example, MYCIN's "knowledge" of the facts about meningitus
is used to diagnose patients who have this disease, and
to propose medications.)
On the other hand, although MYCIN uses a backward chaining
inference engine to perform its deductions,
its "knowledge" of this process is limited to a weak "performance model"
-- MYCIN could not tell the user why it chose this particular control structure,
or indicate how exactly it works,
(except by example).
<<<Doug - this paragraph must be changed for political reasons>>>
While the domain of any Expert System Building program (ESBp) is
programming, few have a real "competence model" of this domain --
i.e. few have any "deep understanding" of the
programming constructs of the target programs they are building.
(EG while AGE can construct a Blackboard based reasoning system,
it cannot reason about such a system.
For example, it cannot answer questions about its efficiencies;
nor can it modify its basic Blackboard model to handle,
for example, a different type of rule.)
Like the other ESBps, the RLL system begins with a store of such constructs.
This class includes a non-trivial collection of types of slots,
(such as Isa or RangeType,)
control mechanisms,
(eg Backward chainers and agenda processes,)
and inheritance schemes
(for example, the ExampleOf relation).
Each of these units is described in RLL's formalisms.
This specification is sufficiently "deep" that arbitrary ensembles
of these parts can be combined;
and it is this collection of parts which
forms the particular representation language KE will use.
However RLL was designed with the realization
that no single set of starting primitives could possibly satisfy
all of the users all of the time.
RLL therefore include provide a number of tools,
which the user can use in constructing his own pieces.
For example, the user can easily create a new type of slot
or inheritance procedure.
(One standard "creation" method involves copying
a "close" existing chunk, then modifying that copy.)
RLL's competence model of programming is essential at this point.
There are many indirect ramifications which arise when,
say, a new laboratory technique is added to Molgen's data base;
similarly there are a host of actions which must be taken
when some part of the underlying representation is changed.
Just as Molgen's code is responsible for propogating the effects of this
new data, so the overall RLL system will
find the parts of the systems which may be affected by this change,
and update these pieces appropriately.
RLL allows the specifics of a problem to guide the
nature and implementation of the user's final ES
-- rather than force the system into some particular formalism.
The KEs are given great latitude in determining what
control structures to use, as well as the form of the data.
This permits the system builders to make
effectively all of the important design decisions,
rather than be limited by the particular options which happened
to be included in the ESBp.
So much for the overview and motivation.
The rest of this RLL section attempts to flesh out this skeletal description.
Subsection 2.4.1.2 explains how facts are represented in RLL ,
and shows how this structure is adequate to handle knowledge
about both the particular domain (eg Oil Spills) and RLL internals themselves
(eg facts about slots or control mechanisms).
This section includes a concrete example, using RLL's management of rules
to show first how the facts are stored, and then
how various type of
modifications can be done -- ie how RLL has attained this degree of flexibility.
Section 2.4.1.3 describes the control structure used for this partcular OSS
application, in a fair amount of detail.
This sections also explains how RLL can simultaneously be explicit and perspecious,
and yet maintain a high level of efficiency.
The last two concluding sections describe first, how RLL fits into the world,
and then overviews what still has to be done.
!2.4.1.2 Knowledge Representation in RLL
RLL is based on the "To every thing, a unit" philosophy.
This uniform representation system extends beyond just encoding the
domain knowledge -- here facts about types of oil and connectivity of pipes.
Units are used to store facts (as well as the executable code) associated
with the representation itself -- such as the descriptions for each type of
slot, or the procedure used to process a given task.
*--------*--------*--------*--------*
M6-3
Isa: (AnyManhole)
FeedsInto: (M6-2)
M6-2
Isa: (AnyManhole)
FeedsFrom: (M6-3)
AnyManhole
Isa: (AnyClassOfObjects)
Examples: (M6-2, M6-3, ...)
Description: This represents the class of all manholes.
*--------*--------*--------*--------*
RLL is (unfortunately) committed to using a semantic net based representation,
based on gesalts called "units",
whose attributes are defined with a set of property-value pairs*)
We will show below the great flexibility RLL does provide,
within this minor constraint.
[* footnote: these properties are called Slots, for historical reasons.
We use the notation Unit:Slot to refer to the value of the Slot slot of
the unit Unit.]
The above units refer to specific objects which exist in the real world --
eg M6-3 represents manhole #2 on ? #6 --
or classes of such objects --
as AnyManhole encodes facts about the set of all manholes.
Other types of units which refer to things like events, which,
unlike individuals, can have varying degrees of generality.
An example should help illustrate this point:
We may want to say general things about oil spilling into a body of water --
eg, that it causes a sheen.
Ideally all such facts should be stored in one place,
say the OilSpillingIntoWater unit,
in such a manner that every more specialized case,
will inherit these facts.
Ie we would expect RLL to conclude
that oil spilling into a stream will cause a sheen in that stream
once it knows that
OilSpillingIntoStream is a specialization of
OilSpillingIntoWater.
We could go on to describe
facts about OilFromPipe93SpillingIntoWOC,
in turn, can be further restricted into
MachineOilFromPipe93SpillingIntoWOCAfterOutFall93, (which can be
restricted to DayOldMachineOil#2FromPipe93'sFirstOutletSpillingIntoWOC-
AfterOutFall93onAug23.)
It is important to realize that these units are not simply produced
arbitrarily --
such event units are created only when there is some
pertanent fact to preserve about the event.
When the fact
is general, it should go on a general event unit, which enables its
descendants to inherit these facts.
Anyway, the mechanism for handling this type of inheritance is distinct from
the more standard ElementOf or SubsetOf relations; and should be treated as such.
RLL insures this seperation by allocating
different units to store facts about each type of inheritance.
Various properties of these inheritance-defining units
indicate how to initialize a new unit
(as stating that Pipe#33 is an Example of AnyPipe should be handled quite
differently from the statement that OilSpillingIntoStream is a
Specialization of OilSpillingIntoWater), or how the values of some slot
may be altered, to maintain this particular inheritance relation.
(eg the SubstanceSpilt of any Specialization, S, of OilSpillingIntoWater must be
some refinement of Oil, whereas S:TimeOfSpill can be arbitrary.
Analogously Pipe#33 can have slots like Length or TimeOfCreation, but not
things like Father or RangeType.)
Exactly how such data is encoded is far too detailed (and irrelevant) for
this report; the important fact is that such facts can be
stated precisely and explicitly in RLL.
Furthermore, such facts can be altered by the user, if his task demands it.
Indeed, the user can even create new "representational pieces":
As none of RLL's prior tasks had needed this Specialization inheritance,
our starting system did not have this particular feature.
We therefore had to design and build
this totally new mechanism, and incorporate it into RLL,
an all but impossible for most ESBps.
Thanks to tools RLL provided, this chore was quite easy.
Note that this feature is now a part of RLL --
subsequent users can now use this type of inheritance,
as easily as any of the other ones RLL "always" provided.
[*fnnote: Returning to a point made in the introduction,
we envision RLL will be constantly growing -- largely through additions
provided by its users. Eventually this growth, we hope, will slow down;
once a "critical mass" of useful features have been built. Needless to say,
this has not yet occurred.]
Slots are another type of representational piece.
As with inheritance modes,
the information relevant to each type of slot is stored in a unit.
The unit below shows that:
The value of x:FeedsInto must be a list of manholes, the only x for which
x:FeedsInto is defined is a manhole, and that if x:FeedsInto = y, then
y:FeedsFrom = x (i.e. FeedsInto:Inverse = FeedsFrom).
*--------*--------*--------*--------*
FeedsInto
Isa: (AnySlot)
Description: This slot maps from manholes to manholes.
Inverse: FeedsFrom
HighLevelDefn: (Composition OtherEnd ConnectedPipes)
Domain: Unit representing a manhole.
Format: SingleElements
Datatype: Unit representing a manhole.
ToCompute: (λ (u) [Find the pipe, P, to which this manhole connects.
See which pipe, p', to which this P is connected.
Return the manhole m, which is connected to
pipe p'.]
Note - the ToCompute of a slot indicates how to deduce its value -- i.e.
S:ToCompute is a function, F, whose value, (F u), is the value to fill
u:S.
*--------*--------*--------*--------*
It is important to realize that those facts shown above are not JUST a description
of the FeedsInto type of slot -- it really is used to define this slot.
If any of those slots were ever changed, the way this slot behaves would
be affected. For example, resetting FeedsInto:Format to be SetOfElements
(rather than SingleElement) would
cause RLL to redefine FeedsInto:ToCompute to return a singleton list
rather than a single atom (corresponding to that manhole,)
and to (retroactively) fix up each value of u:FeedsInto.
[If that value was empty, it would remain empty. Otherwise the single value
v would be changed into the list (v).]
Similarly, each data structure -- each rule, task, and agenda --
is stored as a unit.
This permits the data to dynamically altered during
the course of the computation, or through user input.
(IE one uses the same procedures to add in a new unit, independent
of whether that unit represents a new rule,
a new pipe, or new type of slot.)
Even the procedures of this system are encoded in units --
including especially the parts of the control structure outlined below.
As with parts of the repesentation, these facts are actually used as the
system is run.
For brevity, we will address details of only one of these chunks -- the rules.
Section 2.4.1.?, which overviews the contol structure actually used,
will then sketch the other parts of the system's control,
emphasizing the advantages which come from "unitizing" these parts.
!2.4.1.2.1 Example - How RLL Encodes Rules
Each rule has a number of obvious attributes.
The primary facet of each rule is the actual code which is to be executed.
RLL spares the user the arduous task of enterring the
actual LISP expression to be run;
instead the user can type a more laconic high-level specification
of what this rule is to do.
RLL then "expands" this definition into that executable code.
(This is done in a very general, RLL-ish manner,
using facts stored in the name of the slot.
Hence it is the unit associated with the ThenTellUser slot which "knows" to
expand a message, like
("Do not breath this chemical, " Chemical "!!"
" It is " (Toxicity Chemical) ".")
into code which prints it when the user is present --
(PROGN (WriteToUser "Do not breath this chemical, " (GetVal Chemical) "!!")
(WriteToUser " It is " (GetVal (Toxicity Chemical)) "."))
)
*--------*--------*--------*--------*
Rule#332
Isa: (AnyRule)
Description: Tell the user to hold his breath if the chemical is toxic.
IfPotentallyRelevant: (APPLY ToxicP Chemical)
IfTrulyRelevant: (APPLY NearbyUser ChemicalHasSeepedTo)
ThenTellUser: ("Do not breath this chemical, " Chemical "!!"
" It is " (Toxicity Chemical) ".")
ThenAddToAgenda: EmergencyProcedures
Priority: High
OnTask: ImminentDanger
ImminentDanger
Description: This task tries to find if the current situation is
dangerous; and if so, suggest solutions/fixes/alternatives.
Isa: (AnyTask)
RuleList: (Rule#332, ...)
EmergencyProcedures
Description: This task is called iff the current situation is dangerous;
and issues many quick-and-dirty orders.
Isa: (AnyTask)
RuleList: (Rule#981, ...)
- Note the rule above is what the user would type.
RLL would use this to compute the actual to-be-run code, as it was needed.
*--------*--------*--------*--------*
There are several major advantages to
providing both high and low forms of a rule specification.
In addition to facilitating the creation of a new rules,
this higher level makes the nature of the rule easier to understand
and reason about, for both the user and RLL itself. [fnnote *]
[*footnote:
RLL is able to use different versions of the
definition of the procedure or slot for different type of tasks,
in much the same manner that InterLisp handles both compiled and interpreted
forms of each function.
When a user wishes to examine or edit a function, IL pulls in that function's
source listing, rather than force the user to peruse LAP code.
However it is that low-level LAP code which IL actually runs.
Similarly when someone wants to examine a rule,
(ie estimate how long it will take, or determine what sorts of things this
execution will affect,)
the rule's concise "declarative" form of the specification is offered.
This, of course, is NOT the form which is actually run.
The much-less-perspicious expanded form is used for this purpose.
This also represents a sizable savings of run-time speed.
Section 2.4.1.?.3 addresses this, and related, issues.]
The example above shows how the specifications for this rule is scattered about,
stored in several distinct slots.
This permits different parts to be executed independently --
for example, allowing the quick IfPotentially check to run to all of wide
class of rules; and then running the more expensive IfTrulyRelevant part
only on that small subset which passed.
The THEN parts are also split up.
In common practice, once the IF-parts have all passed, each
of the THEN parts is run, in the appropriate order.
The description above is
the way a rule is evaluated "by default" --
that is, unless the user has something else in mind.
Recall any user can readily modify that rule-evaluating procedure as well.
So, for example, the user may decide instead to execute the code stored
on the IfWorkingOnTask slot of a rule, or IfTodayIs, or any other set of slots.
rather than the current IfPotentiallyRelevant and IfTrulyRelevant slots
now used.
Or he may decide to compose a single Total-IF-Part, which ANDs together
all of these, and runs these at once. Similarly he may want the THEN parts
executed in a different order; or may have decided to only run those THEN parts
for which he has sufficient resources.
Note that this could not be done if each rule was simply a single piece
of compiled code.
We claimed above that it was easy to change the rule interpreter.
This is because that block of code is itself an RLL unit.
Like the rules, it is decomposed into nice sized chunks, which can
be independently modified.
One such hook is a list of slotnames which constitute
the IF part of a rule, together with a description of when that code should
be executed.
We will return to this point in the next section, which discusses the basic
control structure.
*--------*--------*--------*--------*
StandardRuleInterpreter
Isa: (AnyRuleInterpreter)
Description: This is the standard procedure used to interpret a given
rule. It first executes the AND-junction of the rule's
If-Parts. If the result is nonNIL, it executes all of
rule's Then-Parts.
HighLevelDefn: (IF (AND-Junction ProcessPart IfParts)
(AND-Junction ProcessPart ThenParts))
UsedByRules: (Rule#3 Rule#5 ...)
IfParts
Isa: (AnySlot)
Description: The value of this slot is the list of slots of the unit
(here a rule) which descend from the class, AnyIfPart.
These are ordered by the value of their respective
OrderForRuleParts.
HighLevelDefn: (PutInOrder (Subsetting MySlots
(ValueIncludes Isa AnyIfPart))
OrderForRuleParts)
MakesSenseFor: Rules
Datatype: Slots
Format: OrderedSetOfElements
Simplified version of the Standard Rule Interpreter.
Much of its code is "hidden" in the parts of the HighLevelDefn -- eg
IF, AND-Junction, ... Of course, these too are units, and are visible to the
interested user.
(The IfParts unit is shown, to dissuade those who do not believe this claim.)
*--------*--------*--------*--------*
Before leaving this rule description, there are several other
"declarative" facts which might be stored in each rule.
One important slot is the average CPU time this rule has spent, for executing
its IF parts and THEN parts, respectively. This can be used for various
meta-level reasoning tasks
-- such as deciding whether to even consider this rule
in the future (ie did its bang justify its bucks).
Another field is the rule's author - be in human or another rule.
This can help decide who to credit/blame for good/bad rules; and this data
can help the overall system to improve its performance by relying more and more
on capable (that is, successful) rule writers.
Finally, the user himself can store any other type of information he wants --
these are just things which we feel may be useful types of statistics.
Of course various inference schemes -- most importantly an inheritance hierarchy
-- are used to simplify data entry.
A new rule can be entered by merely copying that existing prototype,
and changing only those entries which are inappropriate.
Hence the bulk of the properties are simply inherited from more general ideas
-- here from RLL's facts about rules in general. *
[Fnnote*:
In fact, for pedagogic reasons, we might
tell the novice user only about a small subset of the slots he actually
might be able to change -- and let him believe that these are the only
things he can affect.
He would only be about this dimension of RLL's extendability
when
he begins to complain about how awkward it is to encode this or that fact,
or wonders why he can't seem to capture some particular type of idea.
Until that time, for example,
he would have nothing more that a "behaviour description"
of the rule interpreter
-- which is all he would ever know about the corresponding
evaluator in most other ESs.]
The above description of rules illustrates the degree of flexibility
available to the user at the designing stage.
The current RLL includes many rule interpreters which we, the RLL designers,
felt were appropriate and useful.
It is important to realize, however, that the eventual user is not limited
to only these.
Not only is he free to design his own interpreters,
but RLL aids in this mission, by providing tools which facilitate
constructing such interpreters.
Indeed, as these tools are represented in RLL as well, the user can even
construct his own building aids, if he feels the need.
There are similar mechanisms for implementing the processes used for
"running" agendae, or tasks, or other control regimes.
(For example a black board architecture, for other types of tasks.)
Corresponding to each such process is the data structure to which
it applies; and RLL includes means for extending or adapting those as well
-- ways of extending tasks, for instance.
This section tried to demonstrate how useful RLL's competence
in this programming domain
is when designing and building a new expert system.
The next subsection shows another application of this facility --
when the user wishes to modify his existing ES.
Here the user has the option of changing his mind later,
and know that RLL will modify not only the code,
but perform the retroactive updates to his data required to keep code and data
in synch.
!2.4.1.2.2 RLL's Modifiability
Different system have different conventions defining what part of the running
system is changable, and which is, to all but the most sophisticated user,
untouchable. By design even casual users can enter, change or delete
"domain data" -- facts, in this case, about the connectivity of pipes,
or the precise placements of various buildings.
(Eg if the user later realizes that
Pipe#406 really joined Pipe#317, rather than Pipe#316 as you had thought.)
In many representations systems,
the user can addres and modify generic objects as well --
for example, respecify which features are well-defined for types of roads,
or redraw the taxonomical information about types of oil.
In addition to these, some languages
permit the user to define totally new types of
relations -- in the form of new slots for our RLL language.
(For example, the FeedsInto slot which was handily defined as the
Composition of the OtherEnd and the ConnectedPipes slots.)
These definitions can be used to redefine the "meaning" of a slot as
well as initiate one.
Suppose you realized that pipes could really join many pipes, rather
than just one. This would be difficult to say in many languages --
indeed the only solution in most might require throwing away that FeedsInto
link and defining a totally new FeedsIntoS link.
Even then all of the existing
data would have to be transfered, regrettably by hand.
In RLL, on the other hand, all of the executable code is made explicit,
and the user is permitted to modify it to suit his design.
As section ? pointed out, RLL provides various tools for such adaptations --
for example, the high level specification language for functions,
and the use of appropriately chunking the knowledge.
(These are the same things which proved so useful for constructing of parts
-- but it is also be exploited for retro-actively modifying existing parts.)
RLL's uniform representation of facts makes
changing the code as easy as altering any domain data
-- as the facts which specifies a slot's arity is in the same format
as data about Oil#31, or any other domain or representation fact.
Furthermore, RLL's "understanding" of things like SingleElement and SetOfElements
allows it to do all the appropriate fixes, automatically.
RLL extends this modifiability to include the control structure as well.
This permits the user to
construct his own form of control, as he needs it.
The next section outlines the contol structure we found useful for this
particular Oil Spill task. We wish to emphasize, again, that this Agenda
mechanism is but one of several control structures which will appear in the
mature RLL product -- and that the user could have designed his own from
smaller pieces supplied by RLL, using tools present in RLL.
!2.4.1.3 Control
The decision of which
type of the control structure, and the appropriate set of inference algorithms,
should be based on the desired characteristics of the eventual system.
For example,
the complete OSS is expected to perform a variety of different tasks
-- from determining the type of the spill to performing various
remediation tasks, such as notifying the authorities.
Another important characteristic of this job is the timeliness and ordering
of these tasks --
the importance of recording the name of first witness dwindles when
compared with telling him not to breathe the toxic fumes.
Hence determining the toxicity of the vapors should be of tantamont importance,
especially when the leak might be near people.
A well structured agenda seemed ideally suited to these specifications.
(An additional plus was that
even this still immature RLL system already had this program construct.)
This Control subsection has three other parts. The first is simply
a quick behaviour sketch of this overall mechanism. The second part goes
into more detail, describing how these chunks of code were generated,
encoded, and processed.
These descriptions seem to imply the RLL must, necessarily, be hideously slow.
This is NOT the case.
The third part specifically addresses the issues of speed and efficiency --
a sufficiently important, and misunderstood,
point that it deserved to be included in this description of RLL.
!2.4.1.3.1 Overview of Agenda Mechanism
The agenda contains an ordered list of tasks, which are processed sequentially.
Each task is designed to performs a particular bitesize job.
For example, the goal of one task may be to determine the values
of some parameters, (e.g. the task MatType attempted to deduce
the type of material which had spilt,)
another may add other tasks to this agenda,
(for example, the task in charge of effecting the Countermeasures added
several new tasks to the agenda - one to notify the authorities, another to
begin the clean up process, etc.)
and a third type would print out instructions/requests to the user
(eg "go to Manhole #34 and tell me if you see oil").
There were several other (pre-existings) kinds of tasks
which were not necessary for this particular domain --
for example, one type could suggest and create a new concept,
while another might decide to rearrange the tasks on the current agenda
in recognition of some new fact.
In general, executing a task involves
first collecting relevant rules, then ordering and firing
this list in sequence.
(For this limited oil spill project, this collection step was trivial --
it was simply looking up the set of rules pre-stored on each particular task.)
There are many types of rules, each charged with (attempting to) achieve a
different type of goal.
(In this sense they are similar to tasks, only in a smaller scale.)
Some rules employ a known technique (algorithm) to evaluate
the value of some attribute.
(For example, determining the toxicity of a given material by looking
it up in a table.)
Others may decide to add additional rules to this rule-set,
or propose adding a particular new task to the agenda.
Still others may suggest that the current task (in which this rules occurs)
be suspended, to await necessary new data.
(Note the flow of command is quite structured.
Each rule, task or agenda* can only effect its immediate surroundings.
More global changes are performing to sending messages to its overlord,
proposing this alteration.)
* Footnote: RLL (EURISKO) is capable of dealing with several agendae --
swapping among them as need arises.
This facility was one of many RLL features which were not needed
for this job.
!2.4.1.3.2 The Details of the Agenda Mechanism
We chose to view each part of the overall control as a process --
each operation took some prescribed type of input, and performed
some action, possibly returning a result.
As sketch in the previous subsection, the "Agenda-Processor" looked like this:
Initialize <Agenda>
Loop thru <Tasks>:
Get next <Task>, T
Process T
PostMortem <Agenda>.
The "Task-Processor" is (not surprisingly) similar:
Initialize <Task>
Loop thru <Rules>:
Get next <Rule>, R
Process R
PostMortem <Rule>.
as is the overall OSS Process -
Initialize <OSS-System>
Loop thru <Agenda>:
Get next <Agenda>, A
Process A
PostMortem <OSS-System>.
This commonality was factored out, and exploited by defining the
EuriskoProcess * unit, shown below,
as a common "ancestor" to both task-processors and agenda-processors
(as well as other types and levels of control structure - such as the overall
top-level systems for both Eurisko and this OSS projects).
[*fnnote: RLL was developed as the underpinnings for the EURISKO project,
described in [?]. As this system relies on a sophisticated, and modifiable
agenda mechanism, this control structure was the first one developed and
incorporated into RLL.]
-----
AnyEuriskoProcess
Isa: (AnyClassOfObjects)
SuperClass: (AnyProcess)
SubClass: (AnyTaskProcess, AnyAgendaProcess, ...)
Examples: (FullEURISKO-System, FullOSS-System ...)
TypicalExample: TypicalEuriskoProcess
...
TypicalEuriskoProcess
TypicalExampleOf: AnyEuriskoProcess
FunctionalSlots: (LispFn ToInitialize ToSelectNextSub ToXeqSub
ToPostMortem)
...
-----
Now defining the task processor is fairly straightforward --
first create the OSS-TaskProcessor unit as an example of
AnyTaskProcess, and then fill in the values of its functional slots:
ToInitialize, ToSelectNextSub, ToXeqSub, and ToPostMortem.
(As we'll see in a moment, the value of LispFn is generated from these
components. As such the user is NOT expected to enter this value.)
Actually the user's chore is further simplified as any of these slots
he leaves unspecified defaults to the value of the corresponding slot of
TypicalTaskProcess. *
[*fnnote:
This only works because the various involved slots are all "inheritable
slots" -- ie their respective values can be determined by following
the inheritance paths; and because
the first prototype these tasks will find is TypicalTaskProcess.]
-----
AnyTaskProcess
Isa: (AnyClassOfObjects)
SuperClass: (AnyEuriskoProcess)
SubClass: ()
Examples: (OSS-Task-Process)
TypicalExample: TypicalTaskProcess
...
TypicalTaskProcess
TypicalExampleOf: AnyTaskProcess
ToInitialize: DefaultTaskInitializer
ToSelectNextSub: DefaultRuleSelector
ToXeqSub: DefaultRuleProcessor
ToPostMortem: DefaultTaskPostMortemor
...
-----
These "functions",
DefaultTaskInitializer, DefaultRuleSelector, etc., are themselves units,
which the user can examine and modify, if desired.
The "LispFn" of this OSS-TaskProcessor is now filled in, by connecting the
code present (or virtually present) in the various functional slots of the
OSS-TaskProcessor unit, to correspond to the schema shown in above.
Unfortunately, at this point, no one (or rather, no task)
knows about this nice assembled clump of code.
To tie it in, each task which wants to use it must point to this
OSS-TaskProcessor. Setting the value of Task#34:ToProcessMe to
OSS-TaskProcessor achieves ths effect.
In fact, as the value of this ToProcessMe slot is inheritable, setting
the value of
TypicalOSSTask:ToProcessMe to this OSS-TaskProcessor means everything
which includes TypicalOSSTask as a prototype will use
OSS-TaskProcessor by default
-- unless the user, wanting
a different task processor to be used for this particular task,
explicitly stored the name of that processor on this slot.
Creating the OSS-AgendaProcessor is quite similar,
here exploiting facts stored on TypicalAgendaProcessor as needed.
You may note that it is the Agenda controller which decides what to do
with each task. By default, each agenda "processes" each of its tasks,
using the mechanism which looks on that task's ToProcessMe slot, and
calls that function on this task. Of course, the agenda is not forced
to do this -- it may "know better", and use some other task-processor --
for example, on which is less accurate but quicker, for all the tasks.
Or it may only use this power sometimes, for example, if the agenda processor
is told that storage space is low, or whatever.
!2.4.1.3.3 Efficiency
From the above descriptions, one may infer that RLL is actually
"executing" high level
specifications of various control algorithms that the user input.
Were this true, RLL would have sacrificed any hope for speed and
(time-)efficiency for the sake of flexibility.
That is NOT the case.
As we showed earlier
(footnote on p. ?), RLL preserves both these high level descriptions
definitions, AND what these forms "compile" into -- and it
is that latter body of fast code which is actually run.
Much of RLL boot-strapping code is devoted to maintaining
these correspondences --
so that any change to a high level form marks the (formerly-)corresponding
executable code as invalid. On demand (thatis, the nexpλAi%[BAi!ChAG=IJ~∃%bA]K∃IKHX$A%→_↓oSYX↓KqaC9HAiQ¬hA]K\AQSO AYKm∃XAIK→S]Si%←\AS9i↑AeU]]CE1J~∃G=IJvA¬]HAgQ←eJAQQKgJ↓YWnA1KmKX↓MWe[LAg↑AQQKrA]SYXA¬GGKgMKHAgAKKIS1r~∃]∃q`⊃β&K7*∞Mε*ε=|F*ε≡4εv.\LV"pQ!PU⊗↑NW⊗v≥lrεv}tπ&z∞Mε*π≡XW∨&≥⎇bε}dV66≤=⊗.v?∃Bπ>T∞6.*∞Mε∂"
)Db?46}&QQ&≡∞d&*ε≤,&O',≡&Ng∀λf∂∨Edαh*,↔&F↑$π&F≥dαεNnLW↔π,↑B$≥~→$
~9z∧
→=Y-D→→<l>Z<≥
≥{\k∧
S∪λm<\u∧∧X{{.
;→<d!"]~↑y(~-n≠h→,lZ8z,]]λ⊂∪≠y6yVλ0w2≤:w9P≥44yP→0yz2\⊂1wb→WεE*~4yP1[yz9P≠w6<P_P1ww≤z0w:λ7{2y~2pr⊂VP3'\⊂:42H7w2P≥4vrP_t0y3YP7s⊂βE2|8_w24w→P:40]⊂:2y≤rP22\qy4x≥4ww↔λ⊂#97[P:42\2P7wλ:42P_wr2P_pw⊂1→FE0y_4z90\4v<P→s34qZrw:↔βE!0yZqpv6≡P)&&λ40yP≤0tr⊂→7y⊂4]9P36→|4q4[4z<P~w⊂:2\6yP7Y⊂9x0XrP⊗VH:7P6Xtw:0ZwεE:~2P24Y32y2[:⊂;2\9tww≤P7s⊂≥42P1[r2P⊗KP0w2λ77z⊂~w⊂:4[rWεE∪wy2P→2z0t[9P7wλ47{P≥42yrH6zv:~x62P≥2y9t[w9P0\2P6pZw:0t[2r⊗⊂≥yrr⊂_w2⊂1Xqt2rβE1pwλ12P3≠zw2~w⊂-f→w0z⊂→z⊂0v↔P0w2λ-cy2Zw2y.KεEεEλY↔~↔W~⊂⊂∀|yz2[P#0qZv4z4YyFEεB∧kdg∀FE*4→P92x≠y:⊗⊂≤wP30\⊗⊂40\P2vx~0yt⎇→r⊂)&∪∪yP9]92w3]49PεB;t4qZ⊂22y~{2P3≤7vP4]∪yP⊃_wvx2]2w1rH6wr2[⊃⊂7sλ897s\0vvt[3P4wλ3rw2\0v⊗εB0w2⊂≠s⊂:4→P20z_P9z9≥qz:y→yP0w→⊂0v3[y4z4≠yP4zλ:yryH4w⊂8_y:4q]v0y↔βE&pw≡P7s⊂~z9P7]42y⊂≥tw9P_y2P2≥rP:7H4z9P→w;4y≠w6rw≥↔εE!→qpziYP4z⊂~yP4yH1:tv≥⊂7w⊂≥7x⊂7Y⊂!gi∪&⊗εE_P22vXw2⊂8_stw3H9|yz→vP-aSi&&.KεE)&∪⊂4yP_q62P≥7FE4Yw7y2H$w:2\&4yx yP→~M%P9z≠y0srH6p|4[zvVεB0w2⊂≤z7y2H0w⊂0[6wyzλ:w64[tz2rλ7:vq→y⊂7sλ:w4z≤WεE']42y⊂_4sP0Y;0w:_sryP_wvrP→97vP∩w:2y∪4yx⊂~z9rv→⊂⊗VFB4w1v≥r4w3H:44w→yP64ZrP9x→v64w→P1wy≤2qz4[w⊂0w→⊂4w6~w2P2Y4z7y≤WεEεBεE∧f∪iibiCE)&& yP14Ysryzλ897q≠2vV⊂_z⊂:4~yP9z_srP7Y⊂4z9H22{2[7x6r[:⊗⊂4\P4z9H4vvp]:y4z≡WεE!≡P22yZsw⊗⊂~z⊂;t[6⊂1w[:4w:[zyv<H4w1w\87y0]2P72]P30q]9P0q≠zz⊂1[w:97[⊂9z9≥qz:y→yVεE→7y6yH7s⊂9→x92yYw:0z~ww⊂0[2⊂6wY2yP7Y⊂4w4→y4z0[1rWεB$7{r]2y⊗⊂∪iiP;XyP1:Zv:⊂;X|P:7[P2py≠<P4wλ:44yH7w3wZw3P2→ytswλ897qYyyWεB#7y⊂→|0vx≠2V⊂)∪&⊂40Y⊂72{→y⊂2w_wzw:→y2r⊂_P)wv≥0q62H(97q≠2vP1→s7y2H⊗VFE_v6⊂7Y⊂4z9H892{~wzyP≥wy5P~0r⊂1→rw⊂2~y2qz→r⊂:7]py29H fVv~urP9Ypy1t→yP⊗VCE:44[3yP;Z4qt⊂≠2{2yλ:2y6Zw0v⊂≥tz4⊂_P34w_v⊂;2\24qzλ∀4rP∀&&⊂5[2{P0X7zz⊂≥0yuyCE64uYP⊃#4[2⊂2|_vx62\P7s⊂≤94vr\Q⊗⊂1≥z⊂77]⊂0q7]z⊂:4~w3yP≠4urPλ+t0zλ4yP:~2P9w]y1rFB7s⊂:~2P9x~v6⊃∀KεEεE⊂w7z4→y⊂14YP;rpZw2yyK⊂;t4Xt⊂0v≤wP9z→vvrrλ397vH4z9P≡wzz4⊂;pyH4z9P≠0quP≠sεE0H:yryλ397w≥⊂2w2⊂⊂ P≥94{4Xv⊂2|_vx62H4w;7[;2yP≥42P;X|P;rH;ry2H37y1Yr⊂:7CE2w:→y⊂:4→P1wr→P⊗VP→{2y<]44w3H;pyP~w⊂0P∪$ih<H∀#rz∃0v:rH∪fpz→y4pvβE∪g0[rTV⊂≤0z42\⊂:40[⊂0P7~qry⊂λ&pz2\4pv∪\P70vYQ↔εE⊂z⊂0P→2rx2\⊂62{→v⊗⊂)∪&⊂24Y⊂77zλ<rz⊂~0{2P_w<P7≠z4wwλ7s⊂1[w:2|≥⊂⊗VFB:44yH37y1Yr⊂:yH22ytYw2y9H:7P2↑864qZz6<P≥<x2P
1ww:~w:tw→P:42H0q7{→P2|0[x62TCE⊃&p]2y4p[⊂70vYQ⊂90]42y⊂≥40w⊂≥42P∀≤zs34Xtrw:
P⊃70[rQ↔εBεE P→wwr⊂→97w:λ2w2⊂_wzv2λ40{2H0tr2Y⊂4w⊂≥42P2→ytswλ7s⊂:~4yP9↑yz2vK⊂1<P≤zssr\z4w3CE0x8≤7x94Xz2P2_z0P9]9:qz≥y2yP_w2⊂0[3wy4]46yP_yP;rH;rw:⊂⊂*4~yP:7[P;pyH6tyyZw3WεBεE w≠z42yλ9|yz→vP92[0z2rλ9t7y≥⊗qwvZw3V⊂_sptwλ2x42[ry0v⊂4yP∀&&∪yH22x2[22w1↑P7wεB$w:2\&4yx⊂⊂'z\⊂67w→P:2y≠P860[9P0y→P:7P_:tv2λ)&&⊂~w:7P_P6wr≥v2P;Z4qt⊂_pwεE_2P9:[⊂4w⊂∪i)P-Si)nP
;rSv≠⊂92z≥y7⊂:≠P:44\P87t[:⊂4wλ:42P⊂ww1v≥ytww
WεE)∪&⊂;t[6⊗⊂0]⊂:40]⊂87t[:⊗⊂4[42y4]εE:4→P6pqZ4w2P_w2⊂&∩ih⊗r~pv2q]⊂4w2→x2w2→w1rP≠s⊂&i∀WεEεB)&&∪\P34w_v⊂6pZ7y⊂3_zv:⊂≤rrvyH0v6w\z⊂80\0r7|~qpv≥βE4z⊂≥pyP4]∪yP4[vrw9YP0r0\:0q4[4z<WβE*7wH6zqtλ392rY7vV⊂≥rP37]w2⊗⊂→7y1rY⊂:yP≥7P9x→w2⊂1[w9tr→y0q6→P:4vYFE22Xtr4w→P;t4Xt⊂92Xv6<P≥pyP:~2P12\z↔εE∃44yP≥4vrVλ7s⊂1[zy9rK⊂;pyH77z⊂~v6⊗y\2w:≥H:42P→4w0vλ'iiP~yP1r\:0tw≠<FE1→z:2yλ:40wλ:42P≤97r:Xz⊂7sλ0w<P≤|yz2[P;t4Xt⊂37\1rr⊂≠zz⊂4_w2⊂0]⊂2pqZ⊂9z2\⊗εE6[v24w→P7zyλ34w0[⊂1wr→P:7P≠pz1tλ:42P⊃ia8∪\P64vZz2r⊂≤rz⊂7Y⊂:ypX62P1[vx7w→w:9WβE$7{Y{2y⊗λ0yP9]qt⊂2↑:2y7_v⊂1w[9z0t[:9P;[zv2⊂_ry:0Zw6<P~0{2FB70y9≠{rr⊂→7{w⊂≠zy⊂)Ypy1t⊂;rP≠tst:λ2{2wλ40{"H34w4\t⊂:4→P9|y]2vP4[⊂:42CE37z\⊂20|\P;rP≥ry2P_v67z≥2r↔εB'w1rH0spt[⊂:44\P:<x→P7s⊂≤97q6→vP1g]v2⊂4_{2P1→rw⊂0[62{4Xz2r⊂~w⊂0@≠wy2FB6pz:\2P9|\z2vVλ;t4qZ⊂4w1[8r2rλ0P1w[x2z2[:⊂39≠w:⊂"[2⊂;t~qt⊂;[zv2⊂~0{2FB9ry;→r⊂0yH⊃3rw≥62P3]tr2Qλ2:y4[3P:4~yP1:Zv24w→P897XryyWβEαE⊂L↔~↔_K~P⊂![w1v:\tp∂n
We will conclqde win a perspective of RLL -- iN terms of its past, its
current status, andour Long term plafs.
¬
Two years ago,
RLL Began as a two week project to build a represEntation lAnguage on
which the EURISKO System would be built,
We soon realized many non-triviAl research issues had to be addressed before
such a general, "self-encoding" lAnguage could be constructed.
(We eventually abandoned the quast for this ultimate lAnguage, satisf@eS]N~)←keg∃YeKf↓oSiP↓iQJA≥K]Ke¬YSir↓oQSG AoCf↓a←gg%EYJA]SiQS8ABAY%[SiK⊂AgKh↓←L~∃
←]giICS]iL\@A)!JA[←IJAiQ∃←eSi%GCXA¬gaKGQfA←L↓iQSf↓eKae∃gC]i¬iS←\↓YC]OUCOJ~)YCMOUCOJA]←eVA]CfAi¬WK\AU`~∃EdA←iQ∃dA[K5EKef↓←DAi!JA⊃¬↓β∂?nkW;''Imβπv!βS#.KAβ;/CQβO&+Aβ'~β∪↔O≥∪'↔"β'8∀UZ6JNjq$4(hRS#∃ε≠WKK.sQβOO≠S↔5πβ3πg~β¬β;.≠↔OO∂∪eβ}{Q7O'∪πCCNs≥βK}c∃↓5jβ∂↔K&'9βεKSLhS? β&C∃βOO≠S↔5εkWOQε∪∃βC⊗+Oπ;"aβπMπ##↔O*βπK∃π+O↔⊃π#=β≠Lc1β'rβ?S#/⊃βCπ↔#M84RB≠?Iε+cπ7εc∃1β&C∃β∂}#∃β←FK∂!βO→βWO.!βS=ε+cCπv!β#'>Aβ3↔6+1β∪.3';'&K?;MεkWOPhS∃βπ∪↔O↔w!↓55ε{@∩ε≡@εf.≡>Bε.mzV>B
|bεOD
Fzε|]f/⊗≡LRπ&Tπ⊗/>Dε}2∞Mε*Q)↔'≡]LbrHQ!PTNβH∃
(≠⊂↔[will actually build RLL into the MRS system -- viewing
each of the seperate decomposable parts of this systems as an MRS module,
which can be individually or collectively plugged in (ie activated).
Using MRS as a Lingua Franca, RLL will be able to absorb a large corpus
of knowledge and examples from a multitude of users -- the MRS community.
Each of these other modules will hold facts about a particular domain, or
part of that domain -- eg Medical tutoring, VLSI design, or planning experiments
in the field of Genetics.
For its part,
these RLL-based MRS modules will store facts about certain types of representations,
together with their major applications.
Important in this list will be expertise about expertise.
It is this knowledge which will enable RLL to fashion new ESs with greater
efficient and accuracy.
BOTTOM LINE
While other ESBp systems have proven expedient for tackling particular problems
in particular domains, such systems seem inescapably limited
in the scope of problems they can solve.
We feel this problem is intrinsic to such ESBps, at least until
they, like the human programmers they are trying to emulate,
are capable of a crude understanding of the code they are attempting to
to compose -- an understanding which is far deeper
than the superficial level any current system (including RLL) has yet achieved.
RLL was written with the goal of attaining this necessary
undertanding.
! BIBLIOGRAPHY
[Greiner80] - "RLL-1: ..."
[Greiner & Lenat80a] - AAAI
[Greiner & Lenat80b] - Details of RLL
[Lenat, Hayes-Roth, & Waterman] - Cognitive Economy
[Smith] CORLL
[Genesereth, Greiner & Smith] - MRS
CHI, FOL, LISP...
[DBL's version, from last page]
(17 July 1981)
Draft of RLL section of Building Expert Systems
2.4.1 RLL
Expert systems evolved to help (human) domain experts manage both the bulk
and the complexities associated with knowledge-intensive tasks. One
interesting and important observation is that the task of building expert
systems is itself a suitable one to make the target of an expert system.
This realization triggered the development of RLL, a representation
language language.
RLL is, first, a collection of tools which help the knowledge engineer
(KE) construct, use, and adapt expert system programs. In addition, it is
itself a bona-fide expert system -- knowledgable in facts about
programming in general, and its own subroutines in particular. This
competency permits RLL to "understand" its internal inference procedures,
and provides the user with a mechanism -- simple editing of the
descriptions of those subroutines -- for modifying the RLL environment to
suit his current task. All too often, KEs have had to twist the facts,
rules, relations, etc. of a task in order to fit it into some rigid
representation scheme.
This section will quickly overview this RLL system, taking examples from
our experience coding up OSS -- the Oil Spill System. We hope to show the
gains from self-describing and self-modifying software, as well as
presenting techniques for recapturing any of the efficiency lost by going
down this route.
!2.4.1.1 Overview of RLL
The hallmark of an expert system is competence in some task domain.
Usually, this does not extend to comptence in meta-cognition, an ability
for a program to reason about its own structure and behavior. MYCIN,
e.g., doesn't "know" that it uses a backward chaining inference engine to
perform its deductions, let alone WHY it uses such a control structure.
AGE, e.g., cannot answer questions about the efficiencies of itself or of
the programs it write, nor can it modify its basic Blackboard model to
handle, say, a different type of rule.
RLL begins, as does each KE himslef, with a library of useful, common
types of slots (IsA, Inverse, RangeType, and several hundred others)
control mechanisms, (backward chaining, agendae, and a few others) and
inheritance schemes. Each of these is represented internally in RLL as a
unit, a frame-like data structure of attributes (slots) and values. Thus,
each kind of slot, each kind of control scheme, each inheritance mode is
described within RLL's formalisms. Some od the units are standard
mechanisms for modifying "domain knowledge", and they can now serve to
modify any part of RLL itself. One dangerous consequence of this
philosophy is that they can modify themselves, perhaps destroying the
ability of the system thenceforth to be self-modifying.
At any moment, some ensemble of the units are combined into a description
of the desired current system, and RLL behaves in the prescribed manner.
That ensemble defines a representation language which the KE can "freeze"
if he desires, and use for some particular application he must build.
This is the reason we call RLL a representation language language. No
single set of starting primitives could possibly satisfy all of the users
all of the time.
To help the KE tailor the language to his current task, RLL provides a
number of tools (all represented as RLL units, of course) which the user
can use in constructing his own pieces, and in combining pieces into
ensembles. For example, the user can easily create a new type of slot or
inheritance procedure. Typically, he would copy a similar existing unit
and edit that copy. RLL then "compiles" the changed description into
executable code.
RLL's competence model of programming comes in at this point. There are
many indirect ramifications which arise when, say, a new laboratory
technique is added to Molgen's data base; similarly there are a host of
actions which must be taken when some part of the underlying
representation is changed. Just as Molgen's code is responsible for
propogating the effects of this new data, so the overall RLL system will
find the parts of the system which may be affected by this change, and
update these pieces appropriately.
RLL allows the specifics of a problem to guide the nature and
implementation of the user's final ES -- rather than force the system into
some particular formalism.
The reaminder of this section fleshes out our so-far skeletal description
of RLL. Subsection 2.4.1.2 explains how facts are represented in RLL ,
and shows how this structure is adequate to handle knowledge about both
the particular domain (eg Oil Spills) and RLL internals themselves (eg
facts about slots or control mechanisms). This section includes a
concrete example, using RLL's management of rules to show first how the
facts are stored, and then how various type of modifications can be done
-- ie how RLL has attained this degree of flexibility. Section 2.4.1.3
describes the control structure used for this partcular OSS application,
in a fair amount of detail. This section also explains how RLL can
provide the self-describing and self-modifying abilities discussed
previously, and yet retain (recapture) almost all the efficiency of a
hand-tailored system. The final two sections describe how RLL fits into
the world, and what yet remains to be done.
!2.4.1.2 Knowledge Representation in RLL
RLL is based on the "To every thing, a unit" philosophy. This uniform
representation system extends to all domain knowledge (e.g., units for
each type of oil and each pipe junction), and also to all repreentation
knowledge (e.g., units for the Viscosity type of slot and for the
BackChain control regime).
*--------*--------*--------*--------*
M6-2
Isa: (AnyManhole)
FeedsFrom: (M6-3 M6-2)
FeedsInto: M6-9
AnyManhole
Isa: (AnyClassOfPhysObjects)
Examples: (M6-2, M6-3, ...)
Description: The class of all manholes.
Isa
Isa: (AnySlot)
Inverse: (Examples)
Description: The slot signifying membership in a class.
MakesSenseFor: (Anything)
FeedsFrom
Isa: (AnySlot OilSpillConcept)
Inverse: FeedsInto
Description: The slot naming the upstream manholes.
MakesSenseFor: (AnyManhole)
*--------*--------*--------*--------*
RLL is, for better or worse, committed to using a particular
representation at its heart, though the apparent one seen by the user may
easily be changed, and in principle the innermost RLL might be as well.
That representation comprises a semantic network, with each node being a
structured frame-like "unit" whose attributes (slots) are defined with a
set of property-value pairs. We will show below the great fhexibility RLL
doeq provide, within this constpaant. We use the notation Mil:Isa to
refer @Q↑AiQ∀AmCYUJA←L↓iQJA%gBAg1←hA←_AiQJ↓k]Sh↓∨SH\4∀~∃)!JAMSIghAk9ShAS8AiQJ↓E←pA¬E←mJ↓eKMKIfAi↑↓BAga∃GSMSA←EU∃GifA]QSGPAKqSMif~∃%\AiQ∀AeKC0Ao←e1H@ZZ↓~lZd↓eKae∃gC]iLA[C]!←YJ@dA←\↓oCiKIYS]JFl\@↓)QJA9Kqh~)k]Sh↓eKae∃gC]iL@ABAα≠3πO~↓β?→πβ#gON≠π1↓ε{+↔∨#Mmα∞sf7πvC?3∃αβ↔;∂}#↔M↓ε3π∂S_h+π␈+QβSF)βO↔"↓β?→ε31↓εkπ;#|c↔M9ααS#∃εs↔cQαβS←=π+;'S~↓βK↔π∪↔O↔w!β/'v#M↓β}04+Of{SM9αα?→β≡{WKO*βS#↔⊗)βπK*β∪?k.sMβ?2↓βO3␈#Eβπ↔≠↔;Q∧3K?5π##∃β.s'SM∧K9↓β&C∀4+6K∨WK*↓↓#∃v991↓¬;?KSB↓β?→αα5Y5∩a↓α∂∂∪∪';∞c'Seαβ?→↓∧;f7∞s#?3*a↓α≠␈∪7πQαβ?_4T3↔↔∪≤3K?5Jp4(Q*6}nT∞GOε↑4ε}2∧∞VvON4αF*lubbα∞Mε␈≡T∞&/π,↑6.wM≥f:ε↑lVw'5∀αε≡≥dεF∂lTαπ6≡/⊗NvqQ&&.},V/~
|bε>]lW⊗∞M≡GJr∧λ6}w=≤F/∩≥bε/≥WεfW$αα¬|Tεn∂∀∞v∞wD∞Fzπ<∨∩αε|]f/⊗≥APW&
≥f?~≤&␈/D vNb∞>εNfM≥f:α
≥g&z∀ε⊗}O∀αε}d∞v∂&↑$αjj\rbα∞Mε∂"
≡Bε≡≡Z6/~∧⊂hW=V.rd∧∧Nε\≥FgJ≥Fbα∞>V≡Bl⊗∨'4∧π≡F}]F"ε,Tπ∨&},V"α
≥bε}lTαπεL≤6*b∞<↔Jα∞Mε(h)x
-J|~;
M;Yr-n≠ux.L<H≥-m=λ
≥Hλ≤n\zλ_$
8;[L↑Hλ∃
=λ→.l<↑(
]|Y(∧∞|→8m≤;~>L\β"Pl≡y+λ∞⎇;≠λ≡=≠{,≡~8x-M≤∧P⊂~w42`2it these facts. We want RLL to conclu` J~)iQChαβ?'1¬≠C'3dK;≥βNsS=βλβOSK.5β←Nc1β∂∂+O∃βλ∧π∞F\XD
;H≥
=λ≤nNY8;$
{Xy$∧~=β!-{[unP⊂⊂⊂≥40z OilSpillingIntoStpeam is a specialization oF
OilSpilLingIntkWater. We could go on to describe facts about
αOIlBromPipe93SpillingIntoWOC( a unit which, in turn, can be fqrther
Restrictedinto MachineOilFromPipe93SpillingIntoWO@πβMi∃e∨ki→CYXrLX@Ao!SGP~)GC\@@@@@@@@@@@@@@AEJ@@@@@@@@@@@@@@Ae∃gieS
iKH@@@@@@@@@@@@@@Ai↑4∃↓Cs=YI≠C
QS]K=SXFe→e←[!%aJrf≥g
SeMi∨ki1Ki'a%YYS]≥∪]i←]∨εZ~)βMiKI∨ki
¬YXrg=]βkNβ⊃M9↓∧≠3↔π⊗ceβ←*↓β∪=∧r>Qβ>;Q↓π#=βOε←9βλ↓β;↔:βW;' ↓β≠?⊂h+↔[-∪eβC}K;Q↓εK9↓βrk∪'7,¬g≡N⎇l⊗bα∞>ε∞≡Udαα∧∀∧εv/t∧π.v≡@αεO4∧εv/lXD∧≤≤[lN8y9↓QX<XM≡≤X<M≥≡+λ.=λ≤L≡~→<D
{[≡$∞z→;D∞~→4LT~<h∞={9(∞<]~-l;]λl8⎇λ∞Mh≤≤L↑y<]LQ"X8M}=λ∃
(→5L]]@∧
z→;D∧≥~→$X8⎇∧
<hλ|;Y<L≥λ∩.D→{y.∀λ≠{D(→y-l<X;∧∧→=Y-nβ"]-m=λ∞⎇~8z∧;X8ML<h~.Nh→→.<y;Y≥]≤h∞Mh~;M<Z=∧∞~→<lT→X8nNkC"AQU~→$
98z≥Z<{$[|H
;Y≠
≥Yh≥
<h≥∂≡→(λ
|H~;M<Z=≥Xy(
≡h→~.>~;XnD→\[mTλ≥~Q"[;n,(≤⎇≥Y_<LD⊃;→-\;]∪lD≠|H∧
⎇8\l↑∪yH∞,;_=
≥{\k∧;Y∧∞z≠⎇-Lλ_Y$∞≤Y8.L9λλ≡c"\n\zH∧
S∪λ
≥\⎇<L↑h≥~
≡h≤y.<X=
≥{H_O∀_;≠
|x=~-lh→~,lY<Y-nλ≥;M≡≤h≥
tλ≤⎇
}Y#"Ll8⎇≤d8[⎇.Dλ→8,=λλ≥∂≡→(λ
|Hλ∩-m→<Z.L;Xy%dλλ∃L≡X;⎇.4λ≤≤M}→<]
≤<hλ
|Hλ≥
<y#!-;Z→.-=_;L<+9→,m;Z3Lt≥;Z.Nhλ~-l~8x.L(λ~
}h≥≠d∧~;Z.M8;~/,(λ_$
Y=h∧∞;Z5∧∧
_<aQ\⎇_.M;Yh∞M_=
<→(f6hλ~.∀_;H∧λ>_;.
→(≠l@⊂⊂ w≡h4x2H9t7z[2⊂⊂1→P40w→62rλ8ztz→FE24Y32y2[:6<Pλ397vH⊂⊂:4→P⊂⊂9]0z2vYw:⊂⊂≥40zλ⊂'tv∀x4v6~w3dw≥7iz9→pvP⊂λ4yP⊂λ0FE)\2qtp[4⎇0z~ww⊂7Y⊂'tv∀x4v6~w3dw≥7kpz→y∀V⊂λ7y⊂4≠{P:4→P⊂;0[:ryP≠s⊂9w[rP⊂9[7zεE≠p|P1→P0v:→y2r⊗λ:7P6Xts:0Zw⊂:4~yP80\:4qz[0y⊂$[42y4]0w1bH92v0]4ww↔λ⊂∀2`' the
SubstafcESpilt of any SPecialization, S, of OilSpillingIntoWater must be
some refinement of Oil, whereas S:TimeOfSpill can be arbitrary.
Analogously Pipe#33 can have slots like Length or TimeOfCreation, but not
things like Father or RangeType.)
Exactly how such data is encOded is far too detailed (and irrelevant) for
this report; the important fact is that such facts can be stated precisely
and explicitly in RLL. Furthermore, such facts can be altered by the
User, if his task demands it. Indeed, the user can eveN create new
"representational pieces": As none of RLL's priop tasks had needed this
Specialization inheri`)¬]GJXA←kdAgiCIiS]NAgsgQKZ@A⊃SH@A9←h@A!CmJ@AiQSL~∃aCIiSGk1CdAM∃Cike∀\@@A]QSYJ↓I←S]≤@AiQ∀A←SXAgaS1XAiCMVX@A]JAIKMSO]K⊂@AiQ%f~∃i=iCYYdA]Kn↓[KGQ¬]SgZ0AC]H↓S]G←Ia←eCQKHASP@AS]Q↑A%→0\@A)!SfASLAC\@↓KqC[AYJ~∃=LABA-S]H@↓←LAG!C]OJAoQS
PAiC-Kf@A5S]ki∃fAS\A%→_0AC]HASfA%[a←gMSEYJA←d~)CoWo¬eHAM=dA[←MhA←i!KdAY¬]OkC≥Kf\@↓≥←iJ↓iQCh↓iQSf↓MKCiUeJASLA]←n↓BAaCIhA←L4∃%→_ZZAgUEgKcUK]hAUgKef↓GC\A9←nAkMJAiQ%fAisAJA←L↓S]QKISiC]
JXACLAKCg%YrACL~∃C]dA←LAQQJ@A=iQKd↓←]KfA%→_ECYo¬sfDAAe←mS⊃KH\@A/JA∃]mSg%←\@AI→_Ao%YP@Arowing -- largely through additions provided by its users.
Slots are another type of representational piece. As with inheritance
modes, the information relevant to each type of slot is stored in a unit.
The unit below shows that: The value of x:FeedsInto must be a list of
manholes, the only x for which x:FeedsInto is defined is a manhole, and
that if x:FeedsInto = y, then y:FeedsFrom = x (i.e. FeedsInto:Inverse =
FeedsFrom).
*--------*--------*--------*--------*
FeedsInto
Isa: (AnySlot)
Description: The slot naming the downstream manholes.
Inverse: FeedsFrom
HighLevelDefn: (Composition OtherEnd ConnectedPipes)
MakesSenseFor: (AnyManhole)
Format: SingleElements
Datatype: Unit representing a manhole.
ToCompute: (λ (u) [Find the pipe, P, to which this manhole connects.
See which pipe, p', to which this P is connected.
Return the manhole m, which is connected to
pipe p'.]
Note - the ToCompute of a slot indicates how to deduce its value -- i.e.
S:ToCompute is a function, F, whose value, (F u), is the value to fill
u:S.
*--------*--------*--------*--------*
It is important to realize that those facts shown above are not JUST a
description of the FeedsInto type of slot -- it really is used to define
this slot. If any of those slots were ever changed, the way this slot
behaves would be affected. For example, resetting FeedsInto:Format to be
SetOfElements (rather than SingleElement) would cause RLL to redefine
FeedsInto:ToCompute to return a singleton list rather than a single atom
(corresponding to that manhole,) and to (retroactively) fix up each value
of u:FeedsInto. If that value were empty, it would remain empty.
Otherwise the single value v would be changed into the list (v).
Similarly, each data structure -- each rule (condition/action heuristic),
task (small local goal), and agenda (list of tasks dealing with a single
topic) -- is stored as a unit. This permits the data to dynamically
altered during the course of the computation, or through user input. That
is, one uses the same procedures to add in a new unit, independent of
whether that unit represents a new rule, a new pipe, or new type of slot.
Even the procedures of this system are encoded in units -- notalby
including the parts of the control structure outlined below. As with
parts of the repesentation, these facts are actuallq Used as the system is
run. Editing the units describing them will result in changes in the flow
of control of RLL. Fop brevity, we will address details of only one of
these chunks -- the rules. Section 2.4.1.4, which overviews the contol
structure actually used, will then sketch the other parts of the system's
control, emphasizing the advantages which come from "unitizing" these
parts.
!2.4.1.2.1 Example - How RLL Encodes Rules
Each rule has a number of obvious attributes. The primary fAcet od each
rule is the actual code which iq to be executed. RLL spares the user the
arduous task of enteringthe actual LISP expression to be run; instead the
user can type a more laconic high-level specification of what this rule is
to do. RLL then "expands" this definition into that Executable code.
(This iq done in a very general, RLL-ish manner, using facts stkred in the
name od the slot,∧@A⊃∃]GJA%h@ASLAiQJ↓k]Sh↓Cgg←
SCiK⊂AoSi AiQJA)QK9)KYYUgKd~)gY←h↓oQSG @EW]=ofDAQ↑AKqAC]HA∧A[KgMCOJX↓YSWJ4∀PE <A]←h↓EeKCQPAiQ%fAGQ∃[SGC0X@DA
QK[S
CX@D∧BD~∀DA∪h↓Sf@DQ)←q%GSir↓πQK[%GCXRD\DR4∃S]i<AG←I∀AoQS
PAae%]ifA%hAoQ∃\AiQ∀AkgKHASfAAeKgK9h@ZZ4∀Q!%=∂≤∩Q]eSiKQ←+gKH@E ↑↓]←hA eKCi AiQSLAGQK5SGCX0@D@Q≥Ki-C0AπQK5SGCX$@DBBλR~∀∩!/eSi∃)←+g∃d@DA%hASfD@Q∂∃i-CXQ)←q%GSir↓πQK[%GCXR$@D\D$R~∀R4∀~∀T4ZZZZ4ZZTZ4ZZZZ4ZTZZ4ZZZZ4TZZZ4ZZZZ(~∀@@↓%kYJffd~(@@@@↓∪gBt$∩Qβ]e%kYJ$~∀@@@A KMGeSaQS←\t%)KYX↓iQJAUgKdAQ↑AQ←1HAQSLAEeK¬iPAS_AiQJ↓GQK[%GCXA%fAi←aSF\~(@@@@↓∪M!←QK]iC1Ys%K1KmC]Pt∩QβA!→2AQ←qSG@AπQK5SGCX$~∀@@@A∪MQekYsIKYKm¬]ht∩!β!!→dA≥KCIEs+g∃dAπQ∃[SGC1⊃Cg'∃KaKIQ↑R~∀@@@AQQK])∃YY+g∃dt∩P ↑A]=hAEe∃CiPAQQSfA
QK[S
CXX@λAπQK5SGCXDBBD4∀∩∩∩DA∪h↓Sf@DQ)←q%GSir↓πQK[%GCXRD\DR4∀@@@A)QK9βII)=βOK]⊃Bt∪5KeOK9Gs!e=GKIkIKf~∀@@@AAeS←e%irt∩%⊃SOP4∀@@@A∨])¬gVt∩$Q∪[[%]K]i⊃C]OKHR~∀~(@@A∪5[S]K9i C]≥Kd~∀@@@A⊃KgGe%aiS←8tA)Q%fAiCMVAie%KfAi<AMS]⊂ASLAQQJAGUeeK]PAgSiUCiS←8ASf~(∩@@∩$AIC]≥Ke←kLvAC]⊂ASLAM↑XAgUOOKgPAg←YUiS←]L←MSq∃f←CYQKe]CQSmKf8~∀@@@A∪g∧t∩@@!β]s)¬gVR~(@@@@↓%kYK1Sght$@@Q%UYJFfLdX@\8\R~∀4∀@@A∃[KeO∃]Gs!I←GKIUeKf~(@@@@↓ KgGISaiS=\tA)!SfAi¬gVASLAGCY1KHAS→LAiQ∀AGkeIK]hAMSikCQS←\A%bAIC9OKe←Ufv~∀$∩∪C]⊂ASggUKfA[¬]rAcUSGV[¬]H[I%eirA=eIKeL\~∀@@@A∪MBt∩@Qβ]sQCgVR4∀@@@A%kY∃→Sghh∩@@QIkYJFdpbX@8\\R~(~∀ZA9←iJAQQJAeUYJAC ←mJA%fAoQ¬hAiQ∀AkgKHAo←k1HAisAJ\~∃I→_Ao=kYHAUgJAi!SfAi<AG←[AkiJAQQJAC
i`↔πbβS=7⊗)7KWrβ∂?∪*aβπMεKQβ←∂→β;↔.#↔⊃8hQ)55ji555jQ555ji555Ri555ji55)ji555ji5(4Ph*S#/∪∃βπ⊗)βO↔6+Kπ1εkπ+?∩↓βπ∪6;Sπ>+MβSzβCK?6K∪';:β?SB↓β#'>Aβπ;"β3?]αβ3↔[.`4+≠␈∪7Mβ}1β¬β↔+3∃β∨β↔∂'6K∂πSN{99↓αα'9β∞#∪'SN{9βSzβ≠π∂Nc'Sπ&K;≥β&C∃↓β∨∪↔πSN{84+}1β¬βv+]βK.c↔M1π##'MεC'∨#/⊃β3↔6+1↓βn/↔Mπ##∃βvSWK*β?→β&C∃βK.c∃β↔∂≠'↔IαβS<4W+;∪↔↔≠Sπ≠"βπ;⊃π∪↔πO}q↓βπ⊗{WQ1∧3?Iβ⊗{S!↓π##∃β/≠↔Iβ∞s⊃↓α∀b1β''≠↔3→r↓αJ2b↓β'LhSπ3*βS-β/≠∃β∪N3≠↔K.sQβ[/∪G'?w→β?→¬##∃β&+≠';LεFN}d
v $≥~→$∞≤[xl\≥<Y$
|Hλ∞=≠⎇β!,[|@M9YY.,;]λ∧∞≤<⊃$
yHλ∞L<z|eDλ~;D
=8r∧∧≥~→$∧≤x;,T≠8;Ml<Hλ∞M_=⊂λ$w:2\&4yxβE0λandhes bothcompiled And interpReted↓IP∨Ko→β/→∧+π∂!ε3W;∂&K?99ααW#↔pβ¬βW≤∧W!"]z.≥→<h∞MβP2l_vtw2H7y⊂ %dit @∧@AMk9GiS←8XAβ_↓akIYLAS\Aβ##πQ∧3W;∂&K?9∨~↓βO?/∪∂∀4Tc'OSNs≥!β⊗S#↔⊂∧π&F≥`αε6},6*πMRπ/<XD∧≥≠h∞<]0→YP& hλ⊂1w`$e* Howevep∧AShASf~)iQChαβ3/]nc↔[↔bα2εA∧∧6}&T∧π>F≤=α∧LDλ⊗∨'\≥FgJ∧
'.w5`α¬≡≥]⊗f∂-O∩π>Ybαπ=⎇V.}lQPW>≥nG~πMtε/F≥]⊗v*⊂π↔.LUBαF≤Tε/∨M≥V∂&T
ε␈:
Mvv:
≡Bπ>≥MBπ&≥<Rbε}$αε&↑LW⊗N≥lPhW⎇↔"π=}''~∧
v $≥~~-l|hλ∞M~<h∧>→8n↑~;{D∞z;≠∧∧_9YL\⎇
$∞~→(∧∞];⊃$}hλ⊂m⎇Xz<lQ HY\{_<L≡~=Y$$→[p→≠P7s⊂≥42P9\2qts~qpz4[w⊂⊂4\P7s3→y2rπλ⊂*44\T⊂7cλ1wzy≤rV⊂⊂~yFE'∪j⊂:4→P37y≠P⊂;t~qt⊂4\β actually run. The much-less-perqpicious expanded
fh∂eZ↓SfAkMKHAM=dAiQ%fAakIa←gJ8@A)Q%fACYM↑AeKAeKgK9ifAB↓gSuC YJAg¬mS]OL@A←L4∃ek\5iS[J↓gaKK⊂\@A'∃GiS←8@d\h8b\j\LACIIIKggKLAiQSLXAC]⊂AeKY¬iKHX↓Sggk∃b]:~(~∃)Q∀AKqC5aYJA¬E←mJ↓gQ←oLAQ←n↓iQJAMaKGS→SGCi%←]fA→←dAi!SfAeUYJACIJAgG¬iiKe∃H~∃C ←khX↓gi←e∃HAS\↓gKmKICXAI%giS]
hAgY=if\@↓)QSf↓aKe[%ifAI%MMKe∃]hAa¬eif@↓i↑~∃ JAKq∃GkiK⊂AS]I∃aK]I∃]iYrZZAM=dAKq¬[aYJ0ACYY=oS]N↓iQJAEkSGV↓∪M!←QK]iS¬YYr~)GQKG,Ai↑AIk\@AQ↑ACYrules; and then running the more
expensive IfTrulyRelevant part only on that small subset which passed.
The THEN parts are also split up. In common practice, once the IF-parts
have all passed, each of the THEN parts is run, in the appropriate order.
The description above is the way a rule is evaluated "by default" -- that
is, unless the user has something else in mind. Recall any user can
readily modify that rule-evaluating procedure as well. So, for example,
the user may decide instead to execute the code stored on the
IfWorkingOnTask slot of a rule, or IfTodayIs, or any other Set of slots.
rather than the current IfPotentiallyRelevant and IfTrqlyRelevant slots
now used∞ In getting EURISKO rqnning, Lenat had to deFine three a`ditional
ru@1JAS]QKeae∃iKef↓←L@AQQSfAM←ehXAiQ←UKPA[=ghA←_@AiQ∃ZAeK→Kd@AQ↑AiQ∀@AgC5J~∃W%]Ig←_A∪LZ↓C]HAQQK\Z↓gY←iLA←LAIkYKf8~∀4U##∃β/≠↔Iβne↓β∞cO=β&+∂'∪*βS :∧λ6}o
z6*ε∀λm≥Y{⊃$∧∃≠⎇≥21EZ_<]¬D≥z~,=λλ⊂)h≤c"NMβsrj~2y⊂ !lh oF the difFerent ty`EpεA←L↓∪@→7εCCMp∧αα¬=_-≥_<[∂∀~→(
\>(λ∞|;]β!.~→(
I⊃3@∞<X
9H2|2q]z2r in a↓ISMM∃eK]h↓←eIKHp
β?⊂β7πeεCπ[∃ε#↔∂'&+⊃βSz↓β?;eH4+K,¬bπ&
z6*¬IλT`$≤_<NNh→Sn⊂;t4Xt⊂42H40yP≤zs3 )cient res@=keGKLXλ4!Q$f@⎇→(∞M_9⊂≥44qP_wzv"λ53r be done Id∧AKC
PAeKαc∃β←,ε&*π=_.
≤(⊂⊂H9tw3[2P⊂(~pqrFB4πf @
←[aSαc↔"8lL+λ⊂↔\α only a @⊃←kEYα)β#Wo↓β >dλλm|α2P∀∩c⊂0w→⊂*$"Sα). U`
AGαcπ'\X ↓QX8[nl(≥~≡λ~0~λ8πa`&AKC@≥IβC=∧∧6F∞βYy$∞~→(∧∞];⊂∩H4w:2\αpre@QKd\@↓)QSF↓Sf@A KGCKβ≠∀4.Mε∂"-F}≡4∧ε}Hλ⊂⊃[p∧e is i@Q`∂.β→H∧8π⊂⊂∀& un`∪Hαq↓αM_
lTλ≥~Tλ≤]-L<kλ∧
=λλ
≡c"P∩→qwvx≠yrr into nice si`5α+⊃β∂G+;/Mbβ←#'≤¬ααε<≥bε⊗Tλ
-l→<⊂∩[22w:≠<P⊂ -o`if@%K@@8hR0≡vTλn\zλ⊂∀≠wuP )pε@ABαβ3'O ∧ε}Hλ⊂→[4πtnam`fAβ;#'∂@∧ε≡}n8
≡≥=→$∞~→(∧ 1H⊂__y:⊂ /d∧@AB4⊃ekYα)1βS|∧v/&XD∞z=~∧(λ⊂∩→yqy4\:4wgλ4πf @]QK@9∧εFF∂D∧ε≡}LTπ=≠⎇3D_Y(∧>→0⊃]z2r.
We wi`→X↓eKikβ∪9↓β&yβS#M→↓βC|K;QβLqβS#*↓β;↔G!βO↔≤εFN}eDαπ>
_λm∧→~<l><|q.P⊂:4→FA10\βic Control structuRe.~∀4⊂TZZ4ZZZZ4TZZZ4ZZZZ(ZZZZ4ZZZT4ZZZZ4ZZT~(@@A'QC]ICII%kY∃∪]iKβ∪CK↔&+H ($∧ααα ≡6Pα"*λ≥↑4]-L2;]↑\≤Y.L<J#!$λλλ∧λ→<xn
<≥~-⎇NB5
<h~.P:42H9z0w→0y2≤97qrY8y2P≥yrr tk iNterpRet a eiveN
∩∩$@Aekαc∃)↓∧KQβ≠Lε'∂"[ε.∨↑LW
πMR∧hEVW∞l8
≥{H∪l@⊂:42H9:v %'s
If-Parts. I`Ai!JAeKMkYhA%bA]←9→∪_X↓ShAKaKGki∃fACY0A←L~(∩∩α@↓ecYJ≥fA)Q∃\[!CIif\~(@@@@↓⊃SOQ1KmKY⊃KM\t$Q∪@!β∃λ[)k]Gi%←\A!I←GKgM!Cehαα'~C∂∪SM$hP$$%α↓↓↓"r⊃6+.s∂S'}qαCK}≠↔ONεKQα&C↔:C∂∪SM%Hh)↓↓α↓αWO,"fK.c↔MhJBKW3*→MαK.c∃
Uαq99$hP4(4R↓↓α'5βπKS_h)↓↓α↓α'O P$%"∞sfO3␈!$4)α↓↓↓α&+O∂KOβS'?sP&S#*β[π3,)β?→¬##'Mπ≠3?QεKEβSF)β3'∨!β/→π≠3?S~β?→β&C∃βWvKP4(HH%↓↓FC↔K∃ε βKWd∧RJπ⎇
⊗≡BLW∞≡]lBε7-⎇Rπ&Tε≡f≡8eD⊂;↑)≤T_<NEC"B!⊃(λ∃
<y(≡Y(∪n,→<Y,D_↑(∞M→(≥L≥≥9(
|H≥~]<H∀L↑|→8nM=Y#!!""(∧ |Y→.([xTN]→4_..≤kC!$λλλ∧ ~9z L=Y3λL9[NA∃∀≥= ≥S|Y↑H
∀n\\y5∞M;Y` ←4{≠nNhβ"A⊃"""!∃∃X;∞\2;XmN9→<d <x(λ≥↑29J<]
%⊃"B"!⊃(λλ∧ |Y→.([|TN]→4⊂⊂\:9TFB⊂⊂⊂⊂λ&pur\irw9Yc7y
αi:v"\FE⊂⊂λ⊂⊂"0]0z<h→]∧Di[7z9FB⊂⊂⊂⊂λ#7y6Xz≥∧DSβrderedSetOfElements
¬
Simplified version of the Standard Rule InterpreTer.
Much of itq code is "hidden" In the parts of the HighLevelDefj -- eg
IF, AJD-Junction, ... Of course, these too are units, and↓CeJAYSgSE1JAi↑↓iQJ~)S]iKIKgiK⊂AkgKH\~∀QQQJA∪→!CeiLAkMSβ!β'Mπ≠#?←paβS=∧∧FO∨>\⊗&*∞Mε␈≡T
vFZMrεv}@ε⊗.M_W6*∞MεO~=F∞NUa⊂hR%URjjUQRjRUURjjUURRjUURjjUQ"jjUURjjU!PPH!Q$⊗.mz&*α
HV∂6≥lrαα∞MεO~∧
'.fT∧αε&↑<7εO∞M⊗}rD∧απ&Z&*α≡&*α∧∞6/6↑,⊗bα∧
w&F↑!PR⊗LX6f∂,≡FO6T ε ,8⎇≤d∞z~0⊃Z⊂⊂6tYβht Be s@Q←eKHαβ'9β,∧⊗≡B∧
'.fU`α∧}lTαεN↑
wπ_;]↓Q\{∪nD~<h∞M→(_.l<X9lTλ⊂t
T≥~3,T≥~~.P⊂9:[2P40\P9x"[:⊗⊂⊂→4πr ExecuTing its IF
pArps and TH@≤@↓aCeILX@Ae∃gaKGβ#'[↔gI9↓↓¬##'Mαβ∂π9αβ∃↓¬+Oπ⊃αβ∪ ?$∧π6∂-→w/_Q)V/&∃]F/6]Dπ⊗.≡9vvNβY`⊂≥0yuyH⊗VP⊂≤zqt_yP22Xtr4w→β whetheR to Even cons@%IKd~)iQSF↓`@.LTεNr∞Mε*εnX
∞↑Y(
≤αP24Y⊂4z9H10w3H5:y`4iby @%ifAEUGWfR8~∀4T+π∂!∧ε'.fTλ⊗g≡t∧πε.=xLNhε⊂ )n a qlot the h
C[∀AP∨→∧KSM↓∧WS#|ε"ε@|Hλ>Y8=
}Kβ"N⎇~8p∀λ4¬`∪O!hAEJABAaα+@↔≡⎇`λ∧9Y⊂≠tst:λ12P⊂_w0∂ther rule (p¬k@3-→β∂πp∧αεNn>ε.∨EAPFNβy~,@<V⊂ !nd SynthepπSuJAWiQ∃`@AeUYKfR8@@A)!Sf@Aα≠π9↓∧¬ε.g∧∧ε&.=_F*α∞⎇εzα∞MphV>,V&OExλML8εrP→4πr @≥←←H←α∪π"∞.Vf/50λ≥Yλ⊂~~4yP"_z0P #an help the o`-∃`πMDπ?<⎇→-Q ¬:7H4vx)≠{2P )ts p@∃`≠∨⊗kπ;∂*βeβ⊗+3g≥lrαε]xLT_;Y∧
9x 2H5w⊂ #apable ⊃i!Ch@AαK@~@β"P→]qqr`3q`
kX$AekYα)β@?-_
↑\k@⊂λ ε`∪]¬YQ`%bβS#∃αβWO↔⊂∧εFN↑8Vf28λ-d≤⎇≠n(_;O∀λ≠p~~2yεE≥<x2P≠pε i@9H ?-\↔&Nβ{@⊂~2P;p[8∧s -- theq`
ACIJAUKMhAiQ%]OfAβ;#'∂@∧π>(→P∩Yv⊂6p↑P12FB8¬se@→kXAieaKfAα{⊂∩π>L↔&O>M⊗∨~βC"AQSyH=⎇<\lT≥X<M≥⎇<h∧
8π3 %p¬KMGα)βO∂F+7/4∧αjJ
]w>λλ⊂∀[x7q:_w:6 9 af in`⊃Kβ∪'Sπv≠∀4FK↔Kπ⊗≠#e↓hiβπK*βWO↔ ∧π&@h≤r-↑≠~0∪≡P20z_P⊂2`.try.AαA]∃nAekαc∃β∂∞qβ∃αβ↔;S,ε&. Q(λO∀≠90→→v8 @
←a`'Ns⊂~πM↔"ε←
↔∨&≥lrππ-x
}≤8⊂∩K⊂0w2λ1t0w→βi`≥Nαβ?;O∀π&F|∧q$9]≤M≤αyFE≥t4qdλ0y2Pλ4p∞appr`∨Aβ∪'πS*q↓αXL<αP⊂ 4he bulk @=H βSF)↓βC⊗{C↔K&K↔Mβ∂∪∃↓β≤¬⊗oεLε#!4p∞hep¬SiKα!β≠K|iβ .|∧Y$y;Y.0p @%IKCFZP∃βF+@⊗*hM⎇(⊂ &∪⊂πs @→CGif↓CE@?,εBπ↔]H .P⊂4`.
ge@9KeCX8@@@(hP4*@8hMm⎇→*G⊂⊂$gλ30q`4, fo@HAaKI¬O←OSα→βK↔∂≠?;Mb↓β@>Tλ-≤z≥⊂≠ppe the Novac@∀@Akgα+@⊂@ ¬6p\z2y ondy a smalhλAgUEgKhαβ?2∞Mε*π=HnNh~3M≡~8;
O(≤⊂→→yrw:λ4s⊂)∪&∪⊂⊂∩2P72YrεE ,earnabge@PAWiQ∃`AIS5K]gSα{;Mβ|1αJ2b;Eβ↔G#↔;∪∞∪'3''Iβ?;eIβ←#,qβ#∃ε∪↔∨'w→βS<hS∂?7εcπ'dλ⊗⊗←↑@λ
⎇h⊂⊂]u{py→⊂4r⊂~yP:7H⊂2w1[p2P 4his Op∧AiQ¬hAMC
hXA←β⊃↓β←|s∪↔K_h#←#Jβ#∃β≤∧⊗r?D∧π≡9; ∞MβP1`\8:y2H⊂9wvYP80y≥4qzf_y⊂:<\2P⊂'Y⊂4r2XTε Until that
tiMe, For Exaeple, he need have ngthing more that a "behaviour
αdescriptign" kf The rule InperpreteR -- Which is alh he wouLd ev@∃` ↓β↑s?\4V?W"βS#∃ε≠?KK/≠C?;&K;≥β/3π3W∂#?IβLqβ7?≥!β?SF+Iβ↔Gβ↔KQπ≠gOS.kM:@QQ hUMRε∞-}f*αLW<|Z<∞M;{@∧
yH∀N]→<h∧
;≠≥.>≤X=↑hλ∃
(→→,}Y9(∧
yHλmα2|4X4v4j≡FE0{_tpable to the user at The deqigning stace. The current RLL includes
many rule interpreterpεAoQ%GPAo∀XAiQ∀A%→_↓IKgSα;;↔K~aβ≠↔g!β←↔⊗)↓βπ∧επ⊗␈∞-⊗∂&QQ&∞vD∞W≡.nYB`$λ∩5∧
<h~-↑≠|]≥]λ⊂~≠P⊂92Xv4⎇"K⊂47kY{2y⊗λ:40zλ:42P→{2w:≥pv⊂⊂≥yryεB4yP7≠z⊂64[tz2rλ⊂:7P≠w6<Pλ:42yYU⊂⊂'≠z⊂⊂'[6<P4\P42Pλ392rH:7P⊂→2yt`'n his own
anterpreters, but RLL aids in this miss@%←\X@↓ErAaI←mSI%]N@AQ←←YfAoQS
P~¬M¬GSYSQCiJA
←]giIkGiS9J@AgUGPAS9iKeaIKiKeL\@@A%]IKKα!1βπ~↓βS#/≠∃βS}{3M↓εK∀4Tε&/π,↑6.wL\BεNd
$db≡2π>]IBbπMRαπ↑<Wαε<≥bε/lXD{{\nN]8⎇∧
~<h
}{Hλ.:;→
≥Yc"L≥9≤k∧
9H~T→Y9-Nh≥~T≠Y1,EC"C!*~→<LT_<Y$∧≤z;-≥_<@∧
98z≥Z<{.4→[tD∧~;<
L;9;NM;Y`∧∞~→(∞∞[xy.>y<h∧∞<y1∧∧→[p→βE⊃1:[74w3H⊂0sr[20rVλ7y⊂⊂≥0yuyK⊂7y⊂λ7z42\⊂1w`.trol regimes. (For examphe a
black board architecture, fh∂dA=iQKdAica∃bA←LAiCGα[M9%ααπ?K⊗+GC?v#';≥αβS,4V+π∂!π≠W∂!αβCK?≡+@∨~
~2απMRε&≤L∩απ>N'.∨NXLT≥≠h∧∞z~0⊃Z⊂4r⊂λ0x8 ,ias 6↓C]H@↓%→_~)S]GYβ+∪↔Mεk↔π;~↓β≠∨⊂∧αε/-(
Ao!K\Ai!J~∃kβ≠↔Iβ>KO#↔~βS :
]v&No∀εFO4∧ε/F≡>FNvtλU~R∧ ε/⊗T
FF*∧∞W≡∂$ ε∂~∞Mε*ε}∞FN}d∧ε}0Q(6F∞l⎇⊗v:
↔
ε]→f"εL≡F/∩Dλ⊗v"
=f␈:∞Mε∂"
)Dbπ⎇≥Fbε]xFN7∀λM}λ≠{MO(≥~Tλ_p↔Y2VεE_8z⊂ 0erfoRm the retroactive updates to His data required to k`K`↓G←IJACMH4∃ICi∧AS\AMs]GP8~∀
∀∧d\h\DXd\d↓%→_OLA≠←I%MSCE%YSir4∀~¬ %MMKe∃]hAgegiKZAQCmα)β∪'43↔K↔w!↓β∂|¬g6.nM⊗}w4F.6≥m⊗v:∧∞vF∂D
ε∂↔D∧ε}2∧
FF(Q(N][Z0↔→P⊂9|\z2v@ is changable, and which Iq, To all but the most
sophisticated user, untouchable* By design even casual usep¬fAG¬\@AK9iKdX4∃GQC9OJA←H@AIK1KiJ@EI←[¬S\@A⊃CiBD@ZZ@↓MCGiLX@AS8@AiQ%f@AG¬gJX@↓CE←kP@AiQ∀~∃G←9]KGi%mSir↓←LAa%aKfXA←dAQQJ@AAeKGSMJAaY¬GK[K9if@A=HAmCIS←kfAEkS1IS]OL\~∀Q∃JASLAiQJ↓kgKdAYCi∃d@Ae∃CYSu∃bAiQ¬h@A!%aJFh@lAeK¬YYb@↓UWS]∃H@A!%aJFfDnX~∃ICiQKHAiQC8A!Sa∀Bfbl↓CfAQ∀AQCH↓iQ←k≥Qh\R4∀~∃∪8A[C]dAeKaIKgK]QCiS←9bAgsMiK[f0@AiQ∀AkgKHAGC\ACIIIKfAC9HA[←⊃SMr@↓OK]KISF~∃=EUKGQbACf↓oKYXZZAM=dAKq¬[aYJ0AeKgAKGSMdAoQS
PAMK¬iceKLACeJAoKYαa7∪↔4K;↔⊂hS≠ ?$∞GOε↑4ε}2∞-v∞≤kλ
}H≤Y,NX=`∧∞~→(∞L>≠{M⎇:8x-D~;YM}Y8=
≥{H_,-⎇=λ∞O<→4d∧≠yC!-z;D∧∩;H∧9→~.M;{H∞Mhλ∃
<y+∧∞{{9$∧≠_;L}89y.∀≤→<M]=λλ∞M→(≥.<<Hλ∞Mhλ→\Z;Y!Q]≠⎇≥≠≡(
l=h∃∂≡→<h
|Hλ≤L]_=~-⎇\h%T~;@∧∞~→(m|[(
|H≠Y.tλ≤s
}≤h→M}H≠⎇.$λ∀S A"[_-l⎇89lUHλ
λm|H⊂∩↑0vx6→V⊂:4→P#2rY9dw:≠P⊂9f≠z⊂;t~qt⊂+XyP40[24v<H22s$[2r⊂⊂_yFE*~2P!w[x7yt]4ww≠q⊂:4→P'p∀herEnd andthe ConneCtedPIpes slots.)
Thes@∀AIKMαK;'SN{;Mβ≡9β*βWO↔ ∧π&Z∞,V&.m≥f*πMRα⊗\Xλ-m;Y`⊃λ5s⊂0H9v7zλ0yP⊂≥rv6εB0yP4[4z4p]2P7`.e(@AMkaa←MJAs←TAeKC1SuKHAiQCPAaSa∃bAG←UYHAe∃CYYr↓QWS\A[C]d~∃aSAKfXAICiQKH@AiQ¬\AUkMh@A←9J\@AQQSf@↓o←kY⊂AEJ@↓ISMM%GkYh↓iV@AMCrASαq↓β7∞sd4+f;∨W∞;↔M↓jiβ';&+↔⊃β&C∃β?vceβO|cWS'}qβ'9εk?OQ∧k'∨#"βK↔G,KK∃β&CK?←Ns≥↓β∂;πd4U##πQ∧3↔↔∪≤K;S=∧c';-ε;⊃β&+≠';Ls≥⬬#?Sπfceβ;/9α≠↔,#N';&zMβ3Ns-9↓∧+[↔9¬##↔8hSπ31ε{→βSF)β↔cO≠S';8β∪πSλβ←?Wf!β#π4∧Rπ&t&*πN,⊗w≡lZ&."D∞&.?,↑G&∞-O∩ε↔∀
ε∞vEaPPh)→b¬∀IEBε}d
FF*
zFF/$∧εF∞lABε∞MDε}∩∞Mε*αX∞\⎇=_,-→(_m|→(~.P6pr→P⊂2l≤64qt]⊗εE0[2⊂:4→P:yr\α is permitp KH↓iP≥βn{∪'≠Jβ'Qβ&yβOWO!β#'~β∪↔OL∧vrr∧λ⊗fb
Rεv\XBε&qQ&O~\FO"∞Mε*αλlV.'9≥g&Z∞]fO"βλλ←_;:-l(≥~Tλ⊃_.L=≡0_→P9v']⊗⊂⊂7≠z4q`% it qay`&4⊃'S]≥YKY∃[@↔≠"aβπ≠ β∂#πv;∃↓β&CπQβ&y↓βK.⊃αO,εDn∀]HVn∞nN2bαλ≡2αεTε/F≡N2απMPhV\M↔&@|Kλ
)∪λ⊂⊗XuryPλ:42P≠2qry\py4Pλ1t0w→pyP0[2⊂0v≠⊂⊂:w~z9S@ FeedsInto slo@Q`4+>K3 "
Iv}Z
H
-≤αP9d[3v2`4on sets$ @¬]H@A
C\AQ¬mJA[UYiSa1JAK]QaSKf↓C@∪∪.!β?9αβπP4V;eβ&K7¬8hP4*π~β←¬β,∧↔εf≤XD∞≠z3NL9λ≠n↑ λ∀IIλ≤∀M}Z9→.P;0y~wzyP≥4πolS fgr↓`∂W∂@βπ&≤λ
≡~;sN1"K ⊗H37y example, The hidπP@Aαc↔[↔bβ@∨ε\8
,@4qpz~ww⊂&_w3zpYpP3 /p∧AMk9GiS←9fP@A¬]H~∃QQJAkMJ@A←α1βπC∧ε&␈π-_↔&.O∀αε≡∞]fNNβY`⊂≥42P⊂~w7{v→p∧ge. These are The same
thingpεAoQ%GPAaβ∪?[↔ βG=β/≠↔Wbβ≠/I∧≠?;O'∪W∂SNs⊂~ε|dπε∂,¬≤d¬+(_N↑λ~5∧
<hλ≥≤{c!Y(→/∞≠≠r.L9λ⊃M}H≤Y.NYk8,>~=Y-O(≠;lM9↑:-lh→>
≡⎇~;LT≤_<NNkJ(∧
S∪ n∀λ≥;M≤[|[!Q\Y<∞,<y3NL=~3md≠yHl8⎇≤d
8:y.4λ_z≥Yz;LT≥~→${y→$<hλ\<}(≡h_;∞L<Z;Ltλ_;O⊃"Y≠m\:;@L=_(¬U(_<d∞~→(@0qz9H;t4`#h sp@∃GSMSα+@~ε∀
6f␈D}2ε∂-~GJε≡4εNr∞Mε*α∞<⊗n(β"QM}Y8=∧<h→≡_(⊂⊂X7zz⊂∪βi`_FLbPA←H@AC]dA←iQ∃dAI←5CSLA=` βK/βK↔O,sSπSL{9↓β6∂Q_hR≠GK&C↔K7⎇∪∃1↓¬∩21∨~↓↓Wv#↔KO&;∪'v9 ↓β|∧bαπM
⊗v?4∧εfN<Tα¬≡≥lvf,]HVn.β]λ∧;Yβ!*y=∪lH;→;,]]≤h≥≠≠unP4z⊂≥5P27H0r6⊂≥42P0\897x≤4pz2H30|2\T∧ automatically.¬
RLL extends this modifiability to inc@1k@∪∃¬##∃β≤¬vw'-yBπ∨N.V∨'↑,Rε∂4∧π>.ME`hUM
↔~πZ&nON4π&FT∞W≡/$λ
tλ_p↔[9z9:Xz⊂44\P7{wλ33y6H⊂7s⊂_ww:9≠v⊗⊂ \P42Pλ72rb≤FE4jα
The next secti@=\A←kQYS]Kβ→↓βSF)β∂?w#?1β≥#C@.>NW⊗*∞|Rαεmx
-lλ≥<l\];λm|Hλ∞M~8 FB80y:~qzv0\⊂'tfλ)x4f≠⊂:0yZW⊂⊂+YP;tyZ⊂:7P→vx40\t⎇2Vλ0spt[⊗⊂:4_z⊂:4~yP⊂ Yrw20CE0
e@
QC]SMZASf↓EkhA=]JA←α1↓βO/3↔Kπbβ∂?;'∪?1β≥#K@.>NW⊗/5Dπ≡}\TεNo
H -\;]→,Dλ_;LA"\sm\(≠9.,;≡(]]Z0→Zww2rλ⊗VP⊂_w2⊂:~0z⊂*~2P:yYy⊂⊂1[zv2⊂~0{2P→2yt`'ned his Own
@→aWZAM[CYY∃` βCL+∂↔Mπ≠WCCfK↔⊃β↔IαJ2baβWOLs≥βS}{3Mβπ∪↔O↔w!β'9¬∩218hP4)¬⊂qQ9Eq→↓α∂}sSK?`h($*&C∃β∂FKπ∂&+K'O&K∂M↓ε{⊂∩α∞Mε*α∞↑6/∩|4ε∨/.,Vw"∧F}n≥≥bαπL≡6Jα∞⎇⊗f@λλ≤nN[{YmO εE$[36:b[1rP*~2P1`(oice of @]QSGPAG←]QeWXAIKOS[∀Ai↑@↓gKYK
hXAo!Ch@AαK;≠↔⊗+;∂∀hSπ3∨⎇∪'S#o→β←'faβ∃ε∂S'6)1β←FQβOf{SMβ>K3 ",Rε.↑
F␈N\EBε/L5bα∧m}"ε/≥WεfUAPW&Tε≡}↑
F/&T u≥~
≡2αε←∞ε.∨L\Bπ&t∞ε/⊗m}&jε∀∧π6∂-≤W'J
xbε&≤hf/⊗]nBπ&≡=7~α¬UPhVn-vjεL↑F/⊗]→fNvt∞FF*∞O↔ε*
x D∧≥~→$∞|~3
D≥≠h∞<Y[n
:;Yd∞X<Z-}<hλ∞,;90∩~pz4w[εE20\uyV⊂λ⊂9zqZ⊂⊂⊂0\P⊂⊂7≠z4s<Zw3P⊂λ:42Pλ⊂0z`4horitias. Another important
characteristic od∧AiQ%fAU←λASfAQQJ@AQS[KY%]Kgf↓C]HA=eIKe%]NA←_AiQKMJ@Ai¬gWf~(ZZAi!JAS[A←eiC9GJA←_@AeK
←eIS9NAiQ∀A←GGUaCiS=\@A←_AMSeMhAoSQ]KgfAIoS9IYKf4∃oQK8AG←[ACeKH↓oSiPAiKY1S]NA!SZ@A9←hAi<@AEe∃CiQJ↓iQJ@↓iP∨CL→β≠Wn+M)↓αα#↔;≤∧PhVLZF/⊗]→fNvt∞FF*∞MwFN=≡GJε|dπ&FT∞f∂ε}.2π≡
}Vf",Rε}d∞ε∂⊗≥]w.wD∧εNo
xNL9Xp∩KεE2y\2qtp[68 When The lEak mieht be near pEople. A well strucTured agenda¬
Seeeed ideallq Suited to thesE speCifications. The agendahas tasks of
vary@%]NAY∃mKYfA←LA≥K]Ke¬YSiR0@AKC
PAUkMiSMSα+⊃↓β↔IβO?n)↓βOLk?3L∧2απ,\↔≡}n1PW≡
_6Bπ≥_Vf"⊂εw.\XM≤hλ≤∞-9|Z.O(≥X-NαrP#≠y⊂:4→P⊂:0\uP∞ Some tasks, su@
P@ACL~∃iQ=g@∃βL¬g6}Ni⊗v:
∞Vn∞d∧εfOlXeD≥z3
Dλ~_.l(≠=,=λ~~,]→<@⊂λ894g\αity than p CGα[L4>C?O∃¬∪↔πO|¬g
ε≤,Rα⊗M⎇f*@=→4MTλ→→-]y|X.
~8hL=_ EDλ⊂<d∧_(⊂~_yuP"↑2qzj→yP it
May add neW p C@≤¬74≥≠h∞M→(_,@rp∞da, ocCasioNally pπkaaαcπ;SNs⊂~π⎇↔"π⎇zVf"∧ ε∂6QQ&⊗.]`λ∞M→(≠L←≥λ∃≡zh⊂~≠P2|2Xzz2WβE
This Control su@ c@↔∂&K?9↓∧CπMβ&CK↔∃αβ?S#,ε"πε≤∧]∞∃β⊂⊂⊂∃42P &irstASfAβ≠'7Cdπ∩αε⊃Q'∂.α8rdY:_.m8πr`2 ske@QGPA←α1↓βSFK@~ε|¬P∩\αa`→X↓[@↔∂F;'Oh¬bαα
Mε*π<Xλm⎇Yλ⊂__y:⊂⊂→wryFB4p∞to i`∨E∀@AIKβ#π'EDε&/<8M≤X;Yd∧~≠p≠H842`3e c@!k]Gf↓←@→↓∧∧6}→(⊂≠Yy2P⊂→β`@;,ε&∂&\@↓QY;Xm|α2r, a`≥Hβae@?≤∧W>y9↔λ⊂*42\β`
@Aα#↔O∂⊗KCC'|¬g4≤y0∩[P:7Pλ4p
p@1rAiQ∀A%→_AP↔W≤εB`@ ¬72Xp¬ss@¬`'Lε+∧Y(⊂∀~p∧eo@U`∂3@∀∧π=≠xGλ⊂*44\β i`&A≥∨(αβS#∃∧∧6∂≡U`λ∧∧∃~→$∞α44`2d p@¬`@ Q(n8z0∪~qpv ,y addres@MKf@Aβ##∃↓αβ'OO,∧W4λ≠p∪λ⊂9x %e`λ@@↓C]H@↓K@≠≠L∧6N8π1`9 ~Zα↓↓β∧hS@∨.lh
,=9;]
O(~0⊗\4πr`)¬]`⊃⊃∧∧⊗v"∧λ-≡⎇;Y↑\⎇≠m|α⊂ @A←S@; ∧π&F≤¬⊂λ4z⊂ $eserve`λAi<@AEJ4⊂'l8∞\α2r in this depπGeSββS'⎇`λ∧
βs⊂)∪&⊂∞ Almo@MhACYαa↓β?2βS#∃∧¬F␈∨D∧ε.YZ0⊃Zp¬`≥GβH4+∂∞qβ∃∧ε&.≡≤∧⊂~≥y2r.
~∀∧d\h\β 0∪~βHλ@3βvervi`nAα{⊂∩∧≤|Vv&∀ V.≡≥fO≡QQ hUMRε∞|XLL(_p↔[8∧ai@9`
βπp∧π.vβx 2→y2r pπ@↔Q∧¬v $≥_<myP @]QSGPβCeJAββ@⊗@xy0→\β`HAα{;∃↓∧∧↔ @ ¬0@ ti`≠J8@@A&@≡←4∧ε∂⊗T∧ε≡F|∧p∩[⊂⊂10\β`H@↓←\@Aβ##∃↓∧επ-8πp∩ities h∂L@↓iQJ@↓`↔πα8mnc"P→]x87`2ti`≥NαβS#↔h¬bα∧\≤6BπL≡6@4~8 P→2yt`'ned @Q↑AaKβ∪⊂⊗@|[<d(≤⊂⊂\αp SGβ+3πIαβ'S,ε6OVQQ&@-βq⊗⊂≥4π meet alh∂GC0@AO←¬X\@A→←dAKβCπ7Cd∧RbπMRε>|≥Bαε|dε}vTλ
≡zh⊂⊗X|P12H⊂:7FB22z2\αh@'v)βC#*β[πL¬0∩\β of pπ←[J↓aCeC5KiKeLX@@#*s⊂~@H≥~T≥_<mP
atType at`)∃[aiKα 4+Szβ∪↔∪αXλlT≥~→$∧≥_`0e of mate@ISC@1αβ←#'≤¬αεF≤@∂>~;⊂~∀P⊂ !nh∂iQ∃` β7∂Iβπ∪ ∧αε@⎇~→.ε@
`)¬`∂/M∧εFzπM
↔4_9y-l_+λ∧¬→[p→λ2|0v\4∧e, the @nds Od∧AiCMP∂Mβ>C'∂!∧εv/⊗T
f␈"
lV≡<|p.∂(→Sn⊂:44\P80y≥4qz`,ar domain-(
@Aα3?H∀T∧WF∞↑ F*b
xLT≥≡0_→P1wj[2⊂9jYpπes@PACMHαβ∂K↔∂#∃β¬∧¬f/:=vv≡↑λ
¬@∧¬
In general, executiNdε@AB↓iCgVα↓β';6{3@6↑4ε&O.8
∧∧_{p⊗≠2qz4[3P92[2{0w≥⊂⊂9:[2yVεB8∧heN orderifg↓C]H@↓ISeS9H
βSFKEβ3M≠Q↓βNqβO↔∂+↔;∂*q↓↓α4{@∩α∞MεO~
I⊗nOLXBαε⎇_↓Q\|⊂∀[6⊂8)≠u2qj⊂:44\P1wf≠2qz4[w⊂9j→x⊂;p\P⊂:9~{4pvλ⊗VP$]⊂;pyH9tvx≠<P⊂&≠wutw→FE:hλ:42P≤pz⊂7Y⊂9:v→yP8 2e)stored on e@¬GPAa¬eiSGUYCdAβ#πO-pI↓αSF+K∃β∂∪∃↓βn;d4W#gC↔~β?2∞.Vf/5Dε.∞=∧ε≡F≡,v."∞⎇↔&B¬↔'&]↑π&Nlpπ&z∀⊗≡F≤↑f*ε∀λFN6lZ&.wD
GOεQQ&}∩⎇v∞bd∧αDNd∧π&F≡4π≡∞n8Rπ&[∩αε≡,Rπ≡≥]⊗f∂$∧π&@h≥_.≥|kλ
⎇[≡(∧
;H_$∧≤{8-Mα2yεB9qpv→W∀P⊂∀wvrP≤8r2yH2vx ,oy aAW]←]\AiK
Q]CcUJ@QC1O←eSQQZRAQ↑AKm¬YcCi∀@AiQ∀~∃mC1k@∃β|∧bαπ=⎇V*ε≤¬≥∞
8]0~→U⊂⊂⊂
εgbexample, deteRmifi@9JAiQ∀@Ai←aSGSidAP∨→αβ∧4>K[↔9∧kπS↔⊗Kπ1β↔Iβ3?}[';≥αβ'Qβ-↓β'9αβ¬βS∞∪3∃9J↓α?SF+CM↓∧kπeβ&+∂'∪*βS :∧⊗& Q,⊗&&≡M⊗}v≥Dπ↔;→<d∞≠h⊂~~4yP9≥v2VyYz∩⊂ /p∧Aae=a←gJ↓C@∪∪Ns∃β¬∧εε∂↔M_7.f≡ λ
l=h⊂~_yuFE≥4π the agenda.A'iS1XA←i!KefA5Cr@AMkGOKMhAiQ¬hAiQ∀AGkeIK]hAβ#πO-αC'9↓¬;#'∂@h#C#M→βKWd∧W4≠xp⊃]y9TP_2P9z\βpende`$ @Q↑@AC]CShA9KGKgβ≠πKe∧s↔]β&S¬9α↓";∨&)↓βSF(4+≠d¬w:ε|dε≡}]\⊗v"
~2π∂]_
T≤⎇≤N\⎇≥0→→p⊂∞ Eachpqde, pacK kr @¬KC@;& )β∂∞q↓β?vcd4.3∪↔∂ ∧εO'4λ
-]99~,≡→(∀n↑\[⎇-l~;Yn∃Hλ∪-}Y(→mMβq0vλ1t0w→p¬s Are pEp¬MOE5S]N@↓iP≤4Tε6.vM→f 4≠94n≤9y4d∞≠h⊂∀]9P7{→y27`2d, p@I←a←gαK;≥β&C'Mβ∞cS↔K∂#'?9p¬⊂hPβ"JDλXπwj≠5z2]λ)&&⊂
¬U@%%'↔=J↓β'M∧∧6∂ε≤-F*ε|dε&.≥H
-lhλ⊂≠Zz4⊂)Y{2y0[⊂0sr[20rPλ⊗VFE≤{px 0ing AmongthemACfA9KCHAαC'O-→1↓↓¬##'M∧3π∂'dKSeβ>@~α
yf*ε|dεn∞o∀α¬∀IAPV6\≡G/⊗↑4π>F≤9απy<Y$
Xπr needed fo@HAiQSβ→β+∨⊂p4(Q$∪∩sE`%@→P∞ $↓)QJA⊃KiCSαc@~ε|dπ&FTλ⊗ <8π20H&rqd_w0y`-
~∃]JAGQ=c@∃β&yβK≤X
d88p∀λ80y:λ5s⊂ 4he o@YKeCYαaβ∂?w#C >D↔4_(⊂_≤5qr`3q ~Z4∃KCG AWaKβ∪πS'|qβS?|¬2π≡⎇\Rππ,Xl>X8Y,D≥≡0_→P7s⊂~w8:`4, and perfor`≠Kα 4+O|¬V*ε≤8
≥{Kλ∞
||p∀X4∧q @IKike9S]NA∧AeKgUY`@8hRπMβ≤[↔S∂F+⊃β'p∧π&FT
πε/m_n↑h≤p~X9rq`4ion, the "A`∂K]⊃BS!e=G@↔O≤¬w$H≠⊂↔[urr li`↔J↓iQSFh~∀4TK;'SL∧⊗fO,Tβd∞|]f&βC"IM{|λ∞M≤](πJ_8p∃\←≥εEλ⊂#r`4 h
KqP@p∩S∂≠%y1¬ 4)↓¬βC ><XnP*εE∀4πstMorteM 8 βO∃]IB|8~∀4U##∃↓∃#πO-mβC ><Xn≥|H@⊂~yP∀7≠z⊂9`5ppriSinglY) si@5SYCDβP4(Q)⊗vOM_λ-M>Y(πJ_8 `+>λ
¬→α{?Aβ&CC@*∧π∀N]→<oG∧¬∀@↓∂@↔Q∧¬f/GDπE↔9→/ED∀C"D∧∀≤[l<αyyP∀∧¬αPOpπi7|ε'&.β(∂
.αpe>,∧⊂∀!Q&∂~
_d∞~→(
}Y<X-Mα⊂'iTP(97Xp¬ss -
∀~)∪]@'&Kπ3'T∧Rβ@⊂πiiKix `'β#↔5@aQ$f@{|λ∞M≤Y(πH9y0↔→0[⊂~
λ Get ne@ah@yβ≥K]IBβq1α∧hQ↓αC⊗{∂/>4∧λhαT⊂↔\βtEo@IiK@5βb0≥≥5Z7O∨LYSrpβ"C!
~~0→H⊂1w`-monalitp∩@↓oCf@↓Hπ∂&{C↔⊃αβ?WQb↓βπl@λ∧>≤⊂⊗≠tz2`$ by def@%]S@;8∧ααπMPhT↑XM≡z{t∞
βqr`3pε@@)αβW;≤@∧∧≤z≠n⎇Hλ⊂⊃→v7s@, ac a c@=[[@?p∧αα⊗≥l6/∨MxD⊂⊂:7H⊂17`4hλ
+αL↔=hεx 2oces@M←efAα;⊃β∞;↔;∪λ¬Wπ⊗|8 .ywq9H∀0p∪ w`@3b↓βπM∧¬w&F↑ λ∞O<→0→H0p∞dAP∪↔4∧Vg_Q(l@⊂1w`.tr`∨X↓cie@,∧7'<Y(∧¬(≤p~Xt⊂⊂ !pεAiQ∀@A←@4∧W,8ε6⊂≥4πp-level sp∪@≤εF.o4λ M}Hλ⊂⊃≠z4εE⊃zy4`3hπ↑AC9HAiQ%`
αz:2ππ-x
L\⎇_j%@∧¬∀~)0
+≠vs?S∃RαJ2Dλ
l≡h→→.l8ε7h→p∧ as p QJ↓k]IKβ∪C'mm⊗v?4λ M}H≥~T⊃0
i∩i`O pro@)KGhX4⊂∪↔≤∧7-8Y0∩λ4p∞ Xπ⊂∪↔vQ↓α&C∃αl≡G/⊗T∧ε}Hλ∩↑<Z0→]4qynKα EURISKO re@1S@↔Mαβ?9↓∧∧⊂hW=x
<⎇~,<=→0∩⊂6w`$i`
@'∞∪3∃β∞;↔;∪λ∧εn8z_-m<{ ⊗λ8πhi@
PAS@~β←#@∀λ
.D≥x<d∞α42Pλ30 bstλ
+≤¬vw≤[p⊗λ9z1:Xz:y2H22{ %lh∂aKα!βπl@λ
≥X{p→≤4πrate`λASαsS :λ∧S ETεFEβE⊗V@--(
4Ph ∀∞β↑1.↑X∧p∪@-←!e←α≠↔OLhP&'Oλπ HJλ≥gL≡L≡79βs'`"h¬KGiLR~(M≠WC↔∀≠3πO≠P%"πwJCK|8 .yP
SubClass: (AnyTaskPp¬P∨∂,ε75α⊂ w≡`sr`.daProc`gf0@\\\αH4(_X∞≥<≠⊂∩\β:∩Q→kYYU%∪'↔<['`'α8
]+λ⊃N]≠∪tj5αi|`3te`~@8X 9$hP&@'α<⊂∀XppE@aC[aYα)`⊂MLε0_~qpv"]y0 `'α[>CK|∧6/∨1Q JReaP@!αE*<\4qpv⊃zy4`3hπ←!e=G@↔O_h ⊂MLε0_~qpv"↑0p
p@1K⊂∨→β$α∧∞β↑1.↑X∧y`+oPro@
Kgf~(∪
k]
iS@?v2O3|εG7Hλλ¬ ~8 `0FhA&z';≤M⊗∞f≤εP∩H*7i`%lectNextS@UDA)←aKc'kα⊂4(⊃⊃∩αα∧
F⎇ε|∧p~∪wy0∀em)~∀$X 98hQ5%5h¬PhPβ"Q\β0 ning the tashεAae=G@↔O≤¬w$~8 P≠4πw @→CSeYβIβOSα,⊗Nz≥→M}]x<LDλεV@ d¬Se@≤εBαε>,V∂&QQ'&FT u≥~β0
0\βkProc`ggα{@∩π]m↔"ε≤∧h≥H→0≤_vx6 % h∂LA¬]s)CMP∞CK|∧6/∨5Dε∞vDλ
8π⊂⊂→αi`→X4⊂'dλ
(λ⊂≠_v:r`3 h∂L@↓SifAα3W;∂&K?;πb↓βO3|εG7Hλ∃
y8π4`4ia`→SβS∃ "∧
F⎇≡]H ,>⊂π2`8tSub0~∃)←aKc'kα⊃1βπv!↓αS⎇β?ORn{@↔→; ↔λ⊂⊂λAs we'lhλAgα+∃↓βL¬bε
∧λ-⎇9;]¬D≥~→$∧≥X;∞\αP⊂ /d∧⊂∀)H
.x#7:yP⊂ 'enerated @→` >T∧π&F↑8 $∧_{p⊗\4πne@9if@9ααπM↓∧ε7.≡∧∧π&FTλ
.p¬r is NLπ ⊂4T∧WGε\8
\α⊂:7H⊂2w:→y⊂:4~yP⊂ 6alue.) Actually the u@MKdO@~β∂#?α,Rαε≤∧h∧]<]
<C"Ntp
p@1S@≠≤X ∧<h⊂⊂[<P⊂ /d∧AiQ∃`∂∃β≤¬F␈'4∧εF*
H ,≡Y<h∞]\|⊂∩Xts4`%d ded¬CkYβ#@~πMtαπ~→#!8εal@UJA←L↓iQJAα≠?KK,ε7ε@{Y~-lh≤p⊗≠z⊂7`& Tp∪@∧¬⊗≡∞β∃_.uh97Xp¬ss. ∀~(~∃ -T∧fv@Xπp∀e8∧@A&C'M↓∧¬vv@≤∧P 7or`↔fAEKGαWO∃∧εFF*∧λ
L≡X∧w`5pεAS]Y←YmKα!↓βOd¬w'~≡&*α≥F`@"HZ-m→<Z.L8[⊂∩H9v7`4pεD@Zαi↓β'*βS#↔Lε"απ,Xn8⎇~.l(≥P⊂[8¬es ca`≤@↓EJAI∃iKe[%]KH@↓Er4T∧f}fMx
m≥Yh⊂~~2P4`.heri@QC]GJAaC@&C@≠Z≥f"α,V≡∂↑8 $∞α42Pλ30 `%MhAae=iP∨Sβ_Tλ≥~↑y#"NL<z|d∞βtv , f`∪]⊂ASfAQsaSGα2Sπα8
j∞Xπq`%pπf@:βQP@!αE⊗@--(
Z~(~∃β]e)CgWA` ><XnF@
IpπB`(HI"πo_6f∂>9v )xZP∩Xz9TFBα Su@AKeπYα@∨≠!∃∧∞w_X
.4yuwT90∂c@∃`∂M⊃Q M∨\(6f∂>7 JBα#"A_>_;.
α2y]αT ∂SS-P C@≤¬2mπ-xλl↑|j#!∧j0→@ASGCY∃qC@7∧¬F+Pα5≡.
8x;
L<zt∞4πce@M`4λJq0∩pβ"C!*8 `!αK∂πJL↔=t≤[l<αyyFBα T`3ββ'∂πd+cπ↑λYβs⊂~ AfyTask@!β∪?∂↔≤ε0hPα5≠i≥X∧r4Xv4p~@∀pλ%↓αα∪↔≠∂+3@%L≡6@98π4`4ia`→SβS↔HQ!∃&@ty0⊗→qz'2↑8∧Su@λp ↓↓∧#↔6≤¬0⊗≥):v %S`@3,∧7&@|B#!∧j7l→xiz`"8∧∩@@↓ KMCUY`∩KαXZ≤[p⊃Yyyw`2
∪)=!P∨O$k?KS,¬S@!(λλλL9X=-Nα*0yZβPo`'β"7?KαLVn␈!Q JReaP@%++ ⊗KF@
Thes@∀@EMkαs∂S'|¬g4Kλ⊃\β0p∃@1i)C@≤¬4Nvα8
4Xv4p~@∃` 1α&+⊂⊗∂]H
.αpeSelec@Q←dXAα+S
eDαε∂,QP@.α42`-pπ@↔L¬P∩\β units _Aβ;#'∂@πS#∃∧εW<αy⊂ #an e@aC[@'v)βπl@λ
]y~0∪≡T∧ i@_AIKgαK@⊗.EaP@!αE*4→P⊃& )pπa
\α⊃β >dλ
<h∪j:hεb0\βkProc`ggα{@∩ε≤∧h
mβ{P &ille@⊂AS@9bβeβ≤¬vv@Y8p~~w3P 4he~∃α≠?&Tλ∞<y0↔≥⊂⊂λo@HA`≠≤∧]∞\8ε6 9 pre@MK]hR↓S\Ai!JAmCIS←kf↓H@.βXp~~ww0vλ9v7`4pεA←L↓iQJ~)_∞NMm#πO.αλM|y<p→[y⊂:`.it _Aβ#=β∂|ε',<|⊂↔[2⊂:7H842P≤βche@5BAgQ=o\ASαqβπ⎇3∃ 0β"C!!:z pπ↑AM¬`XA]<AW]J@Q←@⊂∧π,=~→.¬λ≠[d∞α0p∪@,R@AW9←ofAα ?↑@λ∞M~8 P≠4qrPλ0yy`%mb`→Kα 4+∂dεVoα
x D{y→%@⊂⊂"7H84rP~z⊂4`., each tapπVAo!SGPAβ;π;S~βS :∞XlT~8
mustAa←SαsP (αY≠d∞~~0→H'iaVU0yuh≤αh∂GKβ≠G?Ip∧αα¬<X
∞M8π3@ the Value h∂LAQCgVFLhu)←A` ><XndrP⊂≥4π
OSS ≠&@≡]∞-v≡<|p↔\α acHi`mKβ→↓βSG→β↔≠4∧V∨"d∧α∧NβH⊂∪_qz⊗⊂λ0yP 4he Value o`@Aβ##'LhRS =∞-v≡<|s,Tλλλ∞≥≠y⊂λ⊂⊂4`3 @%]QKe%iCEYα)1↓↓αβO/L¬~-lhλλ∧∞~→(∧∧λ≥P⊂[8¬e of
λTq`!αK∂πIz5≥_8 eN*7h 2oces@M≠@∃↓∧εFzα∞MεO~∧ u≥~β5_.uh97Xp¬ss@=` ↓βn+π;Mαβ↔[↔↔KS#'v84+←FK∂!βLs∂3W&+@~¬M_
≤x;∪j:u_<m∀_<h∀≤≤[nMβz4h→P;tv≠⊂:y`% OSS-TaskPrh∂GKβ≠O?Iε∪d4&+∪πWdεBαjT
VvF↑8d∞~→(∞↑y<@⊗λ8πanting a dif@→KeK]PAaCgαYβCK|≠↔OO|ε"π&tλ&*α∞Z6. Q( M}H≥~
≡h≤⊂..~8⎇-L<H∃≡zkλ←≤≠~,==≠≡$∞⎇≠tL\λ≥~T≠X;,T≠yH∞M_=⊂≤97qr\βsor on
this slot.
~∃
eKCi%]NAi!JA∨'L[βOK9IC!e=GCgg=`ASfAckSβ#∃βOLk'3π⊂¬BεF↑,Rε/∞ F}OM≥f*αl⊗∨'1Q'∨&pεAG←αsSK⎇Dε∞f⎇xM≡~≠<d∧≥~_.A ¬24→P:y`%p∧AS]Akh@9ααW/,Tαπ&
_d∞α9:`%, RLL wou@1H@AQ¬mJAg¬GeCMαK∂.Dλλ-o(~≠n(λ⊂∪≠y
@MaKKHαβπ;⊃αCS'\URN∞lh
,=9;Xo∀→[p→λ842P≤βa`↔J↓←@→β4¬F/F≤-⊗fOO∃bα¬M↔"ε≤∧h @'j⊂⊂≥42FE_pyrWλ⊂)&&λ892`3erve@L@AE←β#!β#L∧vBα
H .l8ε⊂ $escripp S←αs@~∧→hBαπ⎇↔"πMW<αP⊂ &or`≠f4⊂ ∂|¬WεNβ→(D
8π:7H⊂⊂
-↓C]H@↓Sh@AαK@~πM↔"α
Hλ.Nα2y bh∂I@J↓β >d∧ε ,<⎇⊂_wr2Pλ8πhi@
P@ASβ_4+π≤εG.∞β≠⊂≤H9:w. @≠kα≠!β?2αJ2D}2ε⊗β{p~yz0∩apping code is @⊃Km@?&+⊃βSzβ7π≥nF∞NβZ0↔→β
∃@&C↔O∃∧∧6␈↔,Xn
βw22[1ryVλ9wP 4hat @¬]rAGαCπ;∨*↓β@&tλλ$
~9z∧
α2{ %l fo@IZA[CIP∂M↓∧εFF(β"J@4πrmep¬Y`%h¬⊗≡␈,∧Y.x7w2~w3P %xecu@QCE@3*β∂?∪*βπMβL¬g6∞β~0∩α O@8AIK[¬]H@QQQCh@↓Sf@0hSS#∃∧¬f/GDλ
≥9(⊂~~0z⊂ #o` J@↓SfA]∃K@∪↔ ¬BJ¬)IBπz;⊂⊗λ⊂2|8_w2⊂ 4hat @9KnAQ%H∂!↓∧¬F/6]AP@,→9P∀[4z4`/n into r`+αs;πd∧Rαε=x Wh_;LD≤⎇≠n2P⊂ 4hese lh∂nAαc↔[↔b↓β≠|∧[.P9wPλ8∧he@d~∃oSαc1βπ≤∧6/∨<X ∧∞|→0∩Y4p`2↓]KqhαβS'\Tπ&FTλλm|α2P )pεA]Kα+∪↔⊃ph ⊂@"TS DβyP #o` J@↓GC@9∧∧&*α≡&⊗OL∧X.4p`2↓HπO ¬bααλ∧X.M→<@≡M_;@⊂λ⊃0 nterpret" the hidπP~∃αc↔[↔bβ∪↔O≤ε&OπM_mnhε⊂)∪&⊂3 )p¬gh@ G←[aαK3↔M⊂∧απ~→0→YP4w:≠P2s &icie@9hAM←β∪7MDππ;⊂hS@↔.β\h∞M~8 P→αastep∧AG←α#∃ 2∧
FFO4λλm}⎇_ P≠w0`2↓BAG←αs@∨&≥nBε@⎇Y0→~2pr -(
AMα{@∩πMRε@{Y#!8∧ime chardπ@∃β|∧bε/∞λλ-l~;Yd∞α40zλ8∧erse depπGeSββS'⎇`D∧⊃\[mT≥~→.2P7`. p QJAG←I∀~∃GC8AEJAα@⊗⊗α8
9_y0 l@dAKMMαK∂'↔w!0∩αλ¬~T→Z0→≤βt tim`
ABαα≡⊗Q∧¬↔4→≠p↔→T∧ o@HA`∪#*↓β≠≤∧\nAα@
`)%[@∃β&C∃β[∞cW*
x D(~~,@t⊂6 %ve`_Aβ≠3 ?Dλ
.P1pv≠2r⊂ &or after @%ifAI∃H'm_
≥{H⊂∀_yFE "e`@9∧εw-=_
2[⊂7p∩↓GQC]≥K@⊃Dλ
<Y(∞⎇8ε6⊂_2P0@ paus@∀p
βαX
∧∞α42P≠2|: (a`≥Hα↓β≠W'+@⊗*⊃Q'&Nβ90→H8∧he@IJAoSαc1β*β; :
mw&N<≤&f*∞8
}y≠p≠[⊂1w`-pare@⊂A`∨'&Aβ#πv!7∂K∞3S↔⊃αα3'Oh ⊗≡|LR`! ¬εE⊂αasi@
CYY@JαJ2D∧εF∂4∧πε∞α9⊂→αh∂d@↓Sif@↓H &←
⊗⊗Nβ~0~≡P4w p Ke5`
↓β|∧bπ∨≤6*α¬P$∧≥≠c!4¬ai@9iC@'p∧π&FTλ
≤β32`2ent ver`'αK?;M∧¬v $λ≥~T_{p∩→P⊂
-AC@; ∧εv@⎇λλ
≥H≥~-\αW⊂⊂λ&p∂`%∀~∃IKβ#π'L∧h
⎇H~≠nt≥~→.p¬ mulp SAαc∃β[,ε'=8πw9H0y2P≠pp ntai`≥Kα!1βW≤∧V"ε≥lBε≡≤8
\α⊂1`!nλ
+⊗)β≠}XLD~;@⊂⊗βH K]¬hAKhαβπ2u∧∧⊗v"λεqn2pw2\αX
\~(~∀BdαqQ9EpεB¬∨α8 `4em F@¬GS@3LεFN<c"AQTp
)⊃dεGTHS
∀~))QS@~β@≡8⎇~-⎇Kλ⊂→[P⊂3 !p∧XAQ¬`
↓β,¬WεF≤8
/,9λ∀II x P≤βtre@9H∂S#~↓β@>
_λm∧→→0→~{2P⊂→αr`∨Z4⊂'Q?→↓∂|¬Wε/LXL<αP⊂ -o` KXλ@A←LAae←α;@⊗∞β;:-lhλ⊂∀[⊂3r`.eral, and of p QJAIC@&λ4+O'∪W∂SαXL↑h_;LD_;⊂∪[y0 thms i@PA`↔O,ε2εNβHλ∞<X
4Xzpar,∧@A≠¬]rA←α1β'Sα4ε␈&XD∧≥z0↔≤β
∃CIJAI@,∧Rπ≠h⊂∀]9P⊂ %np
@'⊗{; .]nB`$λ⊂Y,<=<p∩H4z⊂⊂~yP4`3 bui@1hA←\α↓β@&|∧ε}H⊂sj)⊂ε⊗⊂λ0@
@⊃K[C]⊂AaCO%]N@Aβ≠gOS,¬R¬\9z$deUDα¬∀IDαεO4λλ,-α2P⊂≥4π i@≥]P∨K*↓α'nLW)~8 `0's 252K
pπi←@⊗⊂≡(≠8/
8εzfK⊂0w2λ9z7`2e an↓CY[←β≠QβWvc'7≡LV"εnYV⊗/$λl@⊂:w4]9S⊂⊂∪z42`2 b`∪N4⊂π∪αhλ-nα0sr\β co@5JAMe=Z@A∪αsS↔Jd¬↔>λ~0~≤β`@32↓5 *∧λ
-l{_
`$ing @QQS@;?→β#'↑)↓βO∧∧Vf@~;YaQX{p→≤αection and inline @∃ISi←I`
0β"C!$0p⊗@%]NAC1XAW]=oYKI≥JAeKββC↔O,¬g&.Dλ
-m9[tM]≤∧P⊂≤βhoe@1HAEJ↓BAa←β;↔K≠,¬Bε⊗⎇z7"α∞MphV≡NF.o∞N2ε∂Dλ,↑_+8m|{Z0~~{2P)↑yz2`-pεP→↓ααJ2DλL\9≤h∞M~8h
\αz0@-leve@0@AeKαG?;L¬f 1 X8M≥~=≡%D≤z0↔_p¬ i@PAP↔W≤εBεNβ{Z.Mβy⊂ !nd mode`_Aα;⊃βn{∪'≠Jβ'SO,¬F %Hλλλnαy0∀her`≠←β∪∃ 4T¬↔"ε≤∧h∞
βyy`)bh JAβ#=β←⊗KS∃βv+]βOd¬w'~∧λ
-d≥→0→≠yP7`& h∂YHαβ?;↔~aβO3|εG4≥z~,=λλ∀m≤α{FE≥42P 3yste@4A`∪=∧∧&*ε]xLTλ_<∞∞Xπp⊂@ISCiJ↓iP≥α≤
%βSF9↓β&yβC↔⊗3?K\≥f≡(≠p↔λ0P⊂ 4ask.
λ¬)QSβ→β .≥∀ε∞NDλ
-d≤Y0⊂[4⎇4`.dεA[kαcS'Cd∧Rπ<y0→H397`- a s@%]OYJ↓P∂;|¬{\α3rP_0yrWβE
λWEAKL¬⊗Nα8U_hαC"J)⊂ε∪yH⊂14`'e`ghα↓βCK|∧&f.β+λ∧=λλ∞M~8 Pλ9z0sYP⊂7`& i`)L@AIKβ3↔3?αλ,]]λ∧
<hλ∧
=_ FBαi`≠[¬i`↔KLεGJ@Hλ⊂O∀→→0→Zpπn, it wilhλ@Aα≠?;SL¬g.␈↑8∂∀~;Xm}\≠p→_z2P .ew f@¬Gif@↓CE@?αX
↓QX{p↔≥93v⊂≤z92`#tpeKβ→1↓β4¬w-αyP /d∧@Ae∃aeKgα+;@&≤¬~-⎇Hλ⊂⊂[2⊂6wY2yP⊂≠pε @%]QKe%iC@;≤∧R`!α@
How`mKβ⊃1α≡≥→β@>≤∧h.αp l@PA`∨πβ∀π&@{h⊂∩Xy0`2↓S\Ai!SfA←αs⊂≡}≥lrε&↑8
,@w⊂8 2oces@LX ↓↓∧3?HQ( /8εx ,e(λA∀b1β#∞!β 6↑h .⊂2w1[zs:2\αed @∧A'←Yβ3πLT¬π⊗βx[](_Y,@4πre -(
AC1XA←L↓Sif~)aeKmαK?WM∧εv␈⊗αh⊂∀_p∧ been directed towards AM-like @MKCeGαC↔M↓h¬Rαε←∞εf←,≡FN}n1P@.βt4`#h ne@YKdAi∃aP↔≥l↔&*∞⎇↔&B∧λλ$X∧w0[⊂0w9]p¬r (i`
@AI→_AW9KnAC ←khAβ#πO/~↓β#'↑(4)
4¬⊗v"X∞≥<≠⊂∩\β of pramepεDXAα∪WQβv{Q↓β∞∪?WQ∧εFFNβY|d
α4urH⊃+t0]⊂4qP≥42P⊂≤βource
∃←α1βS#*β@∨ε≥H∧∀WεEβE w7]42y big @]KC@/v+@∨~βλ⊂≠Z4qt also pπiK[5K@⊃β4ε&}j
_
∞P8 o@UiP@1∧εv∂~
_
∞P60qZβ of a
∃Kβ≠↔Iβ4ε&}wDλ -l Hλ∧λ(≥≤M≡X∧pvλ⊂2|0[x62P~w;7`,ves @QQJ@Aβ;πeβ>)↓β←,ε&*εmxL<9λλ∞MβFE %np KdαβS#∃∧∧6}→(%Tλ→0≠→y<r4~w3P 7as i@8AB@A1∪'!rQ∨↔%3π3W*↓≡ .≡LW-8;λ∧∧pπ0vYTVεE≤αathep than a @9SGKdα↓∀n≤LW-8; nP70vYQ↔⊂⊂⊂z⊂0@ deep@∃` β3-3↔1D
$dbM⊗"εmx
∧∂9=β!40s % a`≥r↓]P∨SL¬vrε|dε≡}nLWGλ ⊗H844`3 f`∨e
K@Akβ→β∪↔≤¬⊗ =Y<\d∞≠h⊃/∞≠~0⊃Zz6<Pλ88 `!α(4)#≤¬vw&≥nVNvt∧π&FT∧αε∞-zf*αX∞≥<≠⊂∩JP⊂⊂⊃∪pz2`2ia`_@↓]C@7*⊃↓↓β⊗S#↔⊂∧απε≥bαα∞Mε(hαJ≤n\YZ0⊃Zp¬`≥hαI↓l≥V*∩d∧∧
ε⎇xlD→\[mnα⊂2`.d c@=kYHAαCπ[∃∧∧⊗N→9⊂~w⊂:4→P22`3icn o`4TεFFO4
7O∨LX%D_Z(∞zssr\z4w3H0x8 2opriAte Data @MiekGβ#WK↔~βπ;⊃∧3∨?⊗KS#7~↓βπLhS←*∞|Vw Hλ
M~8h∞MβwP 7as mipπgS]≤Xλ$!Q$
π=\⊗f@→<@⊂≤βhortcomi@9H
"≤v∞NβH⊂∩\42vr\αa`_X↓SfA¬1_GfA⊃KaK]⊃K]Gr↓←\@A%]`∪↔∀c'OAph*?W⊂∧εf↑lpλ∞L<[ ∞
α0w9H0y2P≥4π build RLL inth∞AB↓[←Ikαc∃β←FK∂!β≤9β*βCG→∧K9α6∃_4*@9Z%≥jd∧¬∀dD∧π>NMEBε∂D∧π&F≡@λ∞
z;]¬Dλ~;M<Z5∧∞~→(∧
88z
≥Y(⊂-lλλ∪ ~t9
≤9→0nAα@
iNdepe@9IK@;≤∧Rε↑d U∃~aQ hU)IB?~h
-l9λ∪,≥Xπqλ30zv≥⊂9rb[yP⊂0[4p∂s@PAaCe¬IW`#L≠π1iαβ'Q↓∧εv∂~
~B?~∧ ⊗nn]n6(h,≤F∂πL≤&Nf≡O∩bα
Mvzε↑\6Bεn,V.&⎇QBπy(⊂∪≠zs2, f`∨e
KHAkLAi↑Aβ≠C↔l@λ={\p∀Y2y0q≠2@
@QS[JA⊃KGSI%]NAo!SGPA=H β7∞seβCfWO'⊗c∃↓β⎇βS'?w→βK↔∞c3eβ>@~πMRε⊗↑8
¬@⊂⊂⊂*~4yFE≥4rrVλ5s⊂ #ours@∀XAoCLAU←@ β'31o≠C↔≠!YβS#*β∪'≠∞aα>N~β'Mβ≤∧Wπ_:3MO(_Y.Nα2y≥40wεB842P≤93r:Xz⊂7cλ0s<P≤|yz2[P;t4Xt⊂3'\αced↓BAGQ=SGJA¬hAKC
PAgi∃`XA[=YIS]≤@A←kH~∃MS9CXAG=IJAi<ASCi
PAiQ∀A'¬@OfAY%[SiK⊂AgKhαβ?2∞Z6∞⊗LTε≡}↑ vv.nN2bα
w>∂lXEA ¬0yH9zqtλ2|:2\4εal consTaifts wou@1HAGKβ∪Sππvceβ#∂3∃β;∂∪K ?|\Bε&}⎇bε←↑ λ∞ppy1Z⊗εE+YP6tcZ:⊂2k→w⊂40]2P3 )nished the sycTem i@8AiQJ↓IP∨W⊂∧ε&∂≡4π>
∞|W⊗*∧⊗ff}NF."βC"J\αP12[4r{ % thiq ty@AJ@A←_Aae← YKJ@↓G←kY⊂AQCmα)↓β.+9βπfc↔['∂#↔⊃↓∧K9β¬αβ7?K(h+ .≡NW⊗*∞;↔∨&]P∧∧≥z~,=λ~3L=≥9→,Dλ_(∧{{<↑→;]∧\[{NDλ→;LD≥z~,=λλ⊂≠[zv2λ40{ %
se@ImKHA¬`
↓>+;S3*β∨W'&)∩εNXM≥Yh∃
<h_N]8ε24[3P8 2ocesS. α
!2.$.1*5 Concluqi`∨\4⊂∩*>)β←'daβ∂?v≠3@.LTπ>NβHλ∀≤→4Nx2q`4ive Od∧@A¬1_@ZZ↓S\Ai∃eP↔Mαβ?→βM#@~π≡7"b∧ ↔'_Q(7/↔,Yg"π>L↔'∂5Dε∞vD w/∩
Hmlh≥→.-αP8 ,ans.
αTwo qeAps ago, BLL beGan as a @Qo↑Ao∃KVAaβ∪?+↔≤εBπ&tλλN]8ε2_P⊂92\92y`%np CI%←\
∃αcπ;∨,∨¬β|¬bπ>
_λm∧λ≥~T⊃54I~rsh∞∨<⎇→-Tλ≥{n]→λ⊂⊃→P12`)lp ≤@A/JAM←←\@↓eKCYαKk↔⊂hS7π;Jβ;?9o#C'[L∧⊗bα∞,W≡8<Xm∧λ~<n>9<h∧
_9∧∞≠h⊂⊃→P⊂0r→92y`3ed Befgre su@
P@AB4∃OK]∃aC@1b↓βO↔d∧bn.βXp↔Y4p∞gλ@AYC9KkCO∀AG←@,c⊃↓β⊗)β∂?w≠SKW≤εF.αβHλ∧
y(λ↑Y;]∞\;≠⊗!QX8X-l≠{Y,D≥~→$∞=90→]⊂37`2 thi@LAcI@&K7πS*β3πl}V∞≡UDπ∞∂M~6'Nα;Yd
⎇<\l]≥Y4d∧≥z5
↓ X
4→P3rg→y0v$] "experti@MJACE=khAKβCC↔KαM↔<+H@⊂λ$z⊂⊂~yP:4~yP5w≠{v2`$dπJAo!SGP@↓K]CE1Kf~∃I→_Ai<AMC@≤¬εN}dλL↑h⊃4nP;t`4h g`%∃CiKdαβ↔6m_λm≤αp∞c@dAC@; ππ∂∂,ε&∞∨α+@∀
~→(∧λαj`∩ISK@≡~)`∂gO&+5 "/∩∧f]l↔"b∧λλm⎇]_:-nh~{M}{→0∩→β`
AE¬`∂/4∧ε∞⊗βx
zλ2pe@5K]iCIr@A[¬iQK[QSGfX4⊂∨πn+@~@λ~→.↑X∧p∪@QSGfXAeKaβ∪↔O↔w#πS'|¬bbε≥lBα∧β~0→\⊂897Yβramming. Thep¬JAo¬`
↓βvx4+↔G#@⊗
∞⎇w-h≠Y,\α2r=4π add "heur`∪gβ#'∂M⊂∧απ≠h⊂~~0z⊂ ,ist, pπS@;≤∧Rε.≤8
∧∧~→0~\αistic
∃@>@~ε≥HL\9_P≤αeprepπK@;&+⊃βSF)βOπn)β@>≤ε(≡hε⊂ %,¬N@9bβ↔π∂@π7πSF+7πSL∧6∞bh
-l⎇~0↔[↔
ThpfAβ##∃βF+WK≡8
≤|h⊂≠Yy2P⊂_v92`!dy c@¬aCEYα)β >dλ
m}X¬t`.dε@A←αqβ↔π≤¬αε@⎇~→.↔⊂⊂⊂⊃4πr
instance, a he@U`'O&K
βKαXT≥~_.D≤x:,DλR0∪λ0p∞ @=aKeCQS←\AαK@~π=x,↑~;9.P⊂:`3e`
kX4⊂W ∧ααπlXO∀λλ⊂~~vrq`/nsuming _@A)QKαq↓↓β≤εε.≡≤≥FOVT∧αεOD λ∧∧_{p~[2⊂⊂⊂_x86 9 to
Fu@9GiS←αsπ2∂|¬Wε@|z0~~ww⊗⊂_8¬t @¬Yg↑Aβ#=↓βF+WK≤∧p~~qyP⊗KP4w d¬CGhαa↓β'p∧ε}vTλN]Hλ⊂↔Yαλ
*,εW-<z{eD~8
even app@1S@↔⊃∧εFzα
_
∞p¬`→L8@A3Lε7απ∞-v >X;;-≥Yhλ≥≤{h∞2xp∃@%`↔⊃αβ;,4Tε&.∞βλ⊂⊃Z0p∞ge in↓iQJ@↓%→1αβ@∨O>LVj@λ_<d∧→88m∧⊂ε4`3p fUncti@=\@AQ¬`
β¬αβW;≤@λ∧∞≠c"N<≤Y.p¬ft↓Sh@9ααP≡F≥H $∞Y8<m⎇X;Yd8[p~]⊂"4`3p predicates _A∃ke@'α8
mt≠[p~~qrr tha`(4⊂
-∀λλ.∞→8<L\α⊂:7H12P ! re@Mie@'≤εFN}dλl@⊂"`⊃UAH _Aα#'O+|¬⊗v.D∧ε∞rλZ∩π→<p~λ5w:7H⊂:42CE397[8∧ o@_Aβ#+¬_X@Aβ#=βO,∧RεNd∧π,9H⊂∪_yz2`2, and lo and @ KQ←Yα!↓β'α@ε&ND⊂λ∧∧∃~~.FA6t[5y⊂#[4z1dλ⊂4w Inte@IYSga⊂@AQCLAgS]
J@AE∃K\Ae∃aCC@⊗+⊃9↓αα'9β&C∃↓β4¬⊗.fD∧ε}⊂β"Ql≥9<k∧λαzy4\uwP !ppli@∃H@Ai!JAgC5J@Ag∃hA←L↓QKke%ciSGL@ACf↓kgKHα↓β'→∧¬↔"α
x
<C"LM{8:-nh≥≠d∞~→(∧∞α0p∪@,AP∨→∧∧F/≡≤⎇fNvt∧ε
εl≡f∞bh\=λλ
|H≤r
≡≤h∃
tλ_Y$∞αyr`$ in
λsargames, a`≥Hα↓βS#*β≠ &\X
∧∧~9λ∧→<z,]Y9⊂≥ww⊂⊂→4y9`4 placa iN the national
Travellep∧A)πLAM@3,+Qβ∂#S &T∧π&@⎇<[L≥9;]∧
{H∩N]≤∧P⊂VZV⊂\X⊂⊃∞ The important
∃S⊃KBASαqβπ∪bβS#'~β'Mβ&CπQβ≤∧Vf2\LW∞∨.-↔π&≥ybε∞l@λ∞]X9Sn4¬ady are pkweRd¬k@1α↓5$∀Tε6zπ
x
l↑Y]0⊗λ⊂:40]⊂:42↑P⊂6w\2P⊂ 4haf @IKaCRAiQJAS@;LεFN∞βλ⊂⊃[yz⊂⊂≠pε Carefullp∩~)IKgGβ∪'πv9β↔[,ε'Jπ
_V≡
x D∧≥~→$∞|8 `4em to itself.A⊃C@4¬⊗v:
=f␈>LXF>(λ⊂≠Z4qtεB1pw_2P⊂*\pr⊂⊂_qy7i\β doMaifs hCW∃b@AEUSYIS9H
β↔Gβ↔KQαβ@∨O>LVo~∧λ ,≡z90→λ⊂0w2βE2pyZp¬r, as that c@=[[O\αα. β?∪?←Mph (*⎇εNfT w&F↑ λλZp\λ∧∞|8p~→vyP$_{2P⊂≤93s %n expedient fOp∧AiC
WYS]≤@AaCIiSGkαcπHQ(∞
βq6 %ms iN particulAp doMai`≥f0AgkG @AgsMiK@7~βO.]PεNv↑8λl≡_8[∂∀≠~;-≡→9⊂λ4p∞
the Scope o`Aaβ∪?∪.k@~πMWJε<≥bαπ=yG6*d∧¬>(→P∩Yv⊂:4~yP8 2obde@4ASf@↓S]ie%]gSF4⊃`∪=∧ε7.≡∧λU≤↔∞5Bε∂D∧εf.≡8
∧∞8π:4[⊂:42↑T∧ l@%P∂*∧λ
(~≥-\;H∀∞-βsq0[vry9H842`9 are
t`%eS]NAβ#=β↔o+3πS*aβπK*β∂πC∞∪3∃β|∧bαε∀λλn8¬de unde@I`∂Sπv#';≥∧{⊂∩πMRε≡|LRαπMWHhαX<LT_8
:→vx:4[3P:7H:7P #ompo@MJ@@5h∧ε∞r∞Yf&/,8
≥Y~0↔→β which i@LAMC@⊂π∪↔↔∧∧W$λ≥~≥@εE 4he s@UaKeMαK∂'πbβ3↔[,¬Bε∞β↑(><X 2[8∧ s@eciKZα↓#'l8∞\α4w3H)&&∀H40qP≡p¬t @¬GQSKβ3↔"βC"JM~8 P≥wy5@ dπeKnαβ?WQ∧¬v $→8<MM9<@⊂≤αese@¬`∂!∧¬vrε≤X
⎇89~,4≤≤[l@y0vvZw3P-Qy2r`. et
λ¬C@1b↓↓E@⊗rUj@λλλ≥Yλλλ~λλλ∞z4v , se@YKf@@↓Cf@Aβ##∃↓α↓⊗.βYz-l(Hλ∞M_9⊂λ⊂1w`.verds
se@1H 7∪,ε6∨⊗α8λ 4ion @%]`∪=∧ε6.fe]V}~9P∀Xpz4`/n. RLL wapεAoE%i`∪↔p∧π>OMλ∞M→(⊂∪[pp @=Hλ (αX=∞L8∧w4[3P:4→P72`#essary l@∃mK@1∧εVv&↑.F∞vM_L@P⊂:7H1pp∩ry o`+P@Agkα≠!β¬αβ7πO≤¬↔6(β"P⊂]z7vp]4qP 0p¬P∨∨α,⊗nnα;Yd∞α0p∪@,Xλ$!Q"λL)_$dLxz$
∧α⊂FBαλ
*\;K↔↔p∧ε/"≥Bβ;Xπ ⊂∀90∂gress Repo`%PAW\AA` >|∧X-T∃;Y↑\⎇_-l~;Yd
|∧p∪@QK[fX↓'β∪_↓≠C@7xh ∃\|,VNv↑ ∞εαP⊗@ ¬%→_4bt@\8X λQ+4?⊗]_L↑H H L8π0z∞_0n@ - AAAI
∃7≥aKC]∃` ↓→∧c↔;παCβε∃β($λα2z0Zv9P /d∧A%→0~∃ .d∧Vv∂Dπβ
jλ¬~T⊂π0z≥y2P /d∧A#,εW-<⎇~,>hε⊂$∀(⊂&r[wP0w→⊂,2`2ox Bepkr`(4⊂
n∪,¬f∂"βλ∩∨9<k*-βz4, A>S↔Kn:`*¬Pλλwsw4]4{2P⊃qww7[|@
[Smadh] CORLL
[G`MKβ≠↔K↔&A1α∨⊗+';↔⊂∧α2¬=]↔&ET¬R∧m*1P@@ @↓A4S∪∧∞⎇8Pm<≥→.∧~;@⊂⊂αAS @ ←←V~(≡bh[=GhJPβ ↓↓AK→H',≤6@=9(⊂.D∀P3HE53R+∧α(λ∧∧∀S∪∧z_<∞L<C"JMnH∀HHβP0zλ)jV`RF@
Re@M`
hQ!PDF↑,RεO4λ
(≤⊂↔\αp S←αqβ >dλ∩ε&|8
-\αp∞t↓∩ACZαβ←KπαM⊗v:∞Mε∂"LV∞g4λ
m≡~λ⊂≤[zyεE≠0p∞gua`∂J\α↓αS#M→βO'd¬Bε⊗\8m\αP8 \8∧ o@_AaQJ↓H'l≥Bπ⊗↑λn8∧ o@8AaQJ↓KqaKβ∪P (αX `9stem↓o←eWMQP∨Ap∧α∧ODλ
.P0P 3um`≠CIrA←L↓iQJAβ∪↔C?↔!βg∨αTεn∞LTε∞⊗βy0~λ:42FB8πorkpπQ←@↓KqaKβ∪'.βXp∩Kα ∀~)!P∪↔∂≠∃βK,⊃βSFK@~ε<≡&.];⊂⊗≡P0w2λ1wq9→qz⊂ !ny e@I` ?.4ε␈∩
]↔<{{Xl↑≥~0↔[9FE'[⊂6|P≤0y0∀8@A)Q∀A←]YdAG←]MieCS9hASF↓iQCHαβS#∃∧εF/GDλ]Y⎇~∧
αzy`4 h
@? h#'l8L\<y+D∧∃~→$∞Y<⊂↔\αpλAO=KfAi<AakE1SGCi%←\A←αqα?∂&{↔Iβ⊃I1β≤¬rπεLXλ.<αBE 2espo@9HAEr↓≠Gi← Kd@@⊂εαε∂Dλ
(≠⊂⊂]2yz
_P;rYuP3 2om now).
Thanks @→←dAsα{WIβF+3A⊂hP4*∪|p4(Q!P@J∧∧ααα∧∧2
~4424hhhdQQQQHQQQQHβ####!####!##
∂TO @@∨≥↓%C@; ¬U.vα>⊗λ% aeRb`!0[2⊗j`.ix$ CSD.LENAT@SAH∂%
@bntDr@br5≠Gh~)%→_Aα≠#πC&+H (!Q$&@{H!Q@εE)[y90→ th∞AM=`∂∃πK?UβL¬g&Z∞9rεN≤8m≡Y(⊂$∞Y=|M≡→+@⊂λ$z⊂ !ppearq the docum`@; h"%β>@~π}-↔&NβY`⊂≥pyP [⊂7y2→y⊂7`& iagnitude ig`%∀AIKi¬SYKHαβS#πpβg?U∧εv∞wLXBrraQ hT∀λ,≤→(⊂$Y=`⊂_wy12Xz4wg≤β to the Documenp ≤~)≠CMr↓←@→β&C∃β∂|k7.β]≤d<Y(=_;Ym≥YhλM]y_;
≡~94d∧ + ⊂≥4π give the rePort
a hi@≥QKdAαK;@&↑.6.∨M_md≥z0~~⊂92`!lity.
O`)!KefAαC∃β∧¬vNwLXNP:7P≤2s2`2ence@LXAoQ%GPAi!JAS]QKeKgβ#↔"∞,V∞→<@⊂_pp∞ @QQK@8hS∪ >MHnuβαEεBαAfy@]CrXAβ##∃βd¬⊗v/4λ∞8y0∩Y2r⊂!≡P⊃∃∃
⊃⊂0y→P:42H4πriGinal;
`≠r↓GQC]≥KfACIJAMYα⊂≡y9⊂_<P⊃>>8D\4⊂
π∪&KS'⎇l⊗bε≥lf␈⊗β8=
≥{H⊂∀\β enclh∂gKα!β'd∧%@;vh\e@∧¬∀Q%
AIKαc↔S'v9β@&TεfNβY0→H12st[4ε`∪]≤A`∨'αMαα∩%%"$_;Y∧∧T¬`≠[ ∧AYKα[↔M∧π⊗␈*∞⎇↔&@Q(/∀_;⊂~→y92`$ rep@=`@#4λ ]→=~-lh≥~TλO@∨∂⊃⊂0w→⊂⊃-mVβ" l@%]KfAαc↔π[,ε2π~→(∞<→0→λ<p∂u pπK@; ¬bHhαC"JM_;ZnP37`2 y`∨j↓H∂'[L¬f 4≠9(∀≠_<nD≥{p→→⊗εEεBαRus@L~∀4Ph ⊂J∧∧ααα∧∧24hhhdQQQQHβ#### εFFF@
~→~~4424hc"AQ@εEεBα @πβ'
↓' ∩V%I↓Y@$
$d`Q!P@$λλλ @{2y;~p¬w @=H αJd`4(Q!∩αα∧
$db
_d(β"Ggβ_∞ struct`+β∪↔ Q$ααα8mMα2q`4ion @=H βS|¬vg~∞MrεF]H∧∞α42P~βn`∨@>c↔&|Tε.v⎇_L\αyεEλ⊂⊂⊂ #onstruct, use, and @5←@∪'4π∩ε/∞λ .8∧ s@e`∂S↔o→↓"∨α,VNv↑ ∞∞vD F.v≤¬⊗λ_X 8@X⊂∀$∧αα∧,≡'>≠x@, et @¬X\X@DrpdR8@A'pπ?;∃αβ@≡.β\p∩H⊂)&&λ⊂4p∪ it`'∃YL@Aα9↓β,ππε/,¬≡|yz2[F@
*** -(
@Aα[; ?⎇H ,@pq6 %
>>8@@@ZZ@hπ]@?α⎇F.→y0⊂X4∧e #E⊂⊂⊂λ4p∞ @→CGi@~βπ|¬=∧∞≤[p∪\αa`≠[%]NASαqβ∨↔v+@⊗∞ββ!⊂⊂⊂≤≥Yλ⊂∀]9P7`7n su@ `?W&K;↔M∧¬⊗rπ≡'&N>X≡KH
&F≤∧h={<⊂∩]2p∞c@dAaKe5SifAI→_@Aβ#<4$∧ααα,¬0↔→2y0∪tand" it`&AS@;&+@⊗v≥DαεNβYP∩\αe`≥Gα)βCK|∧6.≥<Y.T∧ and provide@LA`∪#(h ∩α∧∧π/≡↑ λ∞⎇=~⊂λ0P⊂ -ea`≥fAM@?⊂∧αε@8πr4Yαy`∪]≤@AiQ∃`∂∃↓∧επ-βsp∩ams @Q↑@A[∃Kh@AαC'L4R↓↓↓β≤εε.≡≤h
,<=~0↔[9P∞ The RLL s@e`∂S↔h∧ε≡}nL⊗Nw4λλ${{⊂⊗→qz4`/n of cons@Q`@.>N0hR∧∧απ<y0∪≥v⊂:7H8∧he hπ]@?α⎇F.→y(∧8π3t[2ry, inclpISαs⊂~αM⊗ ,Y<Y-nα⊂⊂ 4ypes h∂L~(@@@Aβ≠3 ?L∧k∧∧_{p↔≥90∂l hKGαCπ;≡8.T∧ @%]QKe%iC@;≤∧Rαπ<8
]9<k∧∧_;Y∧
αrz4≠p∧s @=H βπα8m|z8=
≥Yc"E%JHλ∧∧≤≤[l<αr0∃@IKf@Aβ;'S!β`↔LX
L≥]λ∞@=Xπp↔le` OJ8@@~∀x|p→↓α↓βπC∧ε&␈π-_λ.L(_8nM kf
the f@%]CH@↓csgi∃Z@@Z4@AeCQQKd@↓iQC\AMOe
J@Ai!J@AgegiKZAS]i<@Ag←5J~∧@@AaCIiSGk1Cd@A→←eKC1SgZ\@A)QU`
↓β&C∃↓β↑s?←3.#∨*∧λVv>≥lV/∩∧
ε∂~∧w⊗.≡APRα∧∧εf∂M~G.→(∩-d→→=↑[:0↔~w3P:~2P:<\2P7`& contrh∂XX↓CfAo∃YPACLAiQJ↓MWeZαβ?λ4R↓↓↓β&C∃β∪∂#¬(4Ph 4$∧αα¬∞-v⊗@→; λww9dY2y2rβE
The BLL team co@9G@↔;'∪πS↔ ∧ε}r∞Mε*ε|]f/⊗≥Dε∨⊗≤9↔4λ≠8-l9y;,]]β"D∧λλ∀∞-βq6 %m with Special emphasiS on determinang phe source loCatioN, ∀@@A)Q∃rAG←αs@≡NLXL\α⊂9jX897a≠2ryPλ90w3Zw3P⊂→αrgmASIK9iSMsαK;≥↓∧εFF*∧
7εNMAPBα∧∧εn∂LXM≤8ε⊂⊂≥4π Perfo@I[S@;8∧απ⊗]\V&N≤M⊗}r∧λ
≡z|k∧∞⎇8p∀λ0yP .otifYing The~∀@@ACUiQ←e%iSKf8@A)Q∀@Aae=EP∪↔h∧αε@yHλL8;⊂∀[3P⊂ 7ith the ti`≠Kαc';↔≥→↓βπv 4)↓α↓β/K&+C'lpλ∧
βs⊂)]q:0yZβs wapεACYM↑AG←9`∂'∪-∪↔↓↓F);≥→bβK↔∂|ε&&Nlpλ∞M→(∪L≥9#"D∧λλ∪l@⊂0P 7itneSpεAi↑↓BAi←βC'
β∞≠'↓β≥β'31π≠#/Wd∧Bε⊗TλF.⊗↑.&."∞Yg&NAQ"RR$∧ααεTαεO1Q#s@MHλ∧∧_9U↑H~→$
_<h,9;C!∧λλλ∞|<[Y,D≠[p~λ:7P "reathe the fumeq).
~∀@@A ∃`∂'∨p∧ε}H≥~T∀Y4n]≥~3L@P)|`3te`~~(~∀α@@A)Q∀A%→_↓iKCZαβ∪↔∂L#↔"∞Mε.O$λ-|α2v⊂≥wzv"λ860|H842P≤αh∂YJ↓←@→β&C∀4$∧ααπ>λ
-Mα⊂⊂ #p¬SgSβ→↓β7∞sπ>]\Vwλλ⊂∩↑82y:α Dhus @QQJ@Aαk?&]Dαε≡⎇xLM8π0z→yP0FB⊂⊂⊂⊂≠8¬`≠E∃` β?2βSπO←→1β'v≠3@.M_L@P24`2ecti@9H
βSF)βπ∂&K['SL∧W4λ≠p∪λ⊂:42H⊂9x )lhλ~∀@@A← `∂/,¬P∩\αs _Aβ≠↔;∪Ls⊂~ε|¬0~λ4εew↓iKC[LXAC]⊂AU@?αM⊗ /8∧w3H0zz4≠y0p∀ies ≤~(~∀%α↓↓αSF)αJ2bβ7?∪,¬BεNβXp↔\αpobates @→CGiF↓`πl⎇⊗v:hM⎇(≥P∩\αy General
∀@@Agi¬iK@7,¬g'~≤&␈/Dλn
9≠⊂→H87P 3peci@→SFAGα{; 6\8
≥{\h,=→y,]H≠8-m≠{⊂∩\β in
λ the @⊃`π≥l⊗>(_X.tp∞.AβIGαyβ'l8∞\α2r are @IKaeKMK]iCQS←]fAP∨→αβ↔[↔w#@~@β"H∧∧λ≤p~Xt⊂⊂ \β "oil @MaSIYαK;≥βLsS :⊂λ-βr4P≠pε water @
CkgKβ→β¬β≤¬ε.∞βKHDλXπz4βE⊂⊂⊂λ30qj≤β and eve@9ifACIJAeKAaKgKαsS↔⊃∧∧↔4∀S∪∧∧];Z.NiHC!≤ε0≤\α↓↓↓↓E∩21βLs#↔KLεF.λ≥~↑y(⊂⊃[w9z9≥qz9P→90∂m↓↔%_Aα;⊃β&C∃αWvKSMβ∧∧⊗≡↑≤|R`$λ⊂p∩YF@
>x|@@@↓3¬@?↔∪?]↓2αP≡Nβ[p∪\αad]↓C]HAm'iKMαK ≥jhn⊂0r2~z4w`.al i@9H/KnS'∨p¬bHhαC"A∀λλλλww:9≠v⊂7`& phe h@?&+1↓βM→↓β∂≠↔"∧λmdλ_;D∧_9y-l_(λ
\αqt0[4yvFBα contain`∪]≤@AC\α↓β ?,LWε.Dλ
≡⎇λ⊂↔Yα tashπfAi<AEJAββC ><Xn≤αr⊂ 3eque@9iSCYαce 0β"H∧∧λ⊃0⊂Xt⊂:0\βk Ipε@AI∃`∂'∨v+⊃↓β&y↓βC,ε&&@|[ ⊂λ0P⊂ 0arti@
kYCdα↓β+∨⊂¬Bαπ>Xλm∧λ_<aQHλλ∧→=→.4p ning @QQJ@Aβ≠C'∪b↓β'π&+@⊗N≥EBαε≥↑εf.β90↔≥4s3@ counter`≠KαOWK,ε2ε←!Q"αα∧
πεNnM⊗v:
→g∨',XλnM9{\d∞≠h⊂~~2P:`3er. Tasks hCr↓C@∪⊃∧¬f/:∞L↔=|h⊂~≠P⊂:4→P0sr[20VεB⊂⊂⊂⊂→U3W, the imple`≠KαsQβ∂|εVw→<[,\<⎇0→→yP:0\βk
*** mi@≥Q`⊃β∞#⊃βS∂≠ ∨~hn⊂0r`4hkri@QrA]←β#'6α8p⊂]4sw or @MaSIXAG←]QCS@;n+;@"βHλ↓QLπ⊂≡x@@@Aα∪∪M∧εF∂≡>4ε&@|H⊂⊂]z47`2itp∩Aαs?S'4¬⊗≡∂M_md_;Y∧Xπy spi@1X@AGα{;@&≥→fn8π:πλ⊂εE⊂λ⊂⊂ ∀apπV@Aα+c↔∂,εFN}aQ"αα∧λ
-nβ3v 6es @
←YYKα≠S'lpλ∧∞Y;⊂∩]0p∞t↓`@.β→4eD≠x 2→y0 ng phe@4XAC]⊂AM@'⊗K;≥β&C∀4$∧ααεM_nD~;@⊂≤β`c@,∧Vv≡U`λ∧
~→(∞8¬`→Kβ→β .≤ε(∧→=→.4¬`∪]∀@A]Kβ9↓β'v3?K\≡FN}eDαε∞LAP@$λλλ≤α24`4ional r`+αc↔M↓∧εFzα∞Mε*α8
.92w:λ⊂90∃@1KgKhαaβπ∪ ∧εv/tλ
≡z|h∞MβP:4→F@
>x|@@@↓GkeE∃]`⊂4R↓↓↓β∞;↔;∪λ∧ε␈∩∞8
.x2w2λ8∧he cur`%∃]`⊃β&@≡Z∞Mrε∂|≥↔"εlXλl↑|x<O∀≠Y0≠H20p∀a,∧⊂∀!Q Jα∧∧¬&FT
$db∞LV∞j≡G&.β<⊂~→p∧ to hCW∀A`∪#*↓β .βy→-Dλ_<d∧→y0↔→y0v⊂λ0p∞d
λ∧@@@↓KqiKαs@≡N-H $<h⊂_≠yyt`"le. Each↓aSKGα)β >dλ
mmβ{v %dge
*** adde`λAi<AaQJ↓[←IKα`4))RQ↓↓↓∧εv∂~|Vv/,≥FOV\@λ
}H_8Nz90q]2r↔ As @∧AeKgβ+3@"βλ⊂⊗[yz⊂⊂≠pε @QQJ@Aαk?&]Dw1 ¬∃∃
⊂⊂⊂⊂~βn`∨o1K@∪∨*↓β'MαβWOπ⊗c∃β'p∧ε⊗@⎇~⊂≥42P /il s@ASYXAββ@⊗@x[⊂∩[P0w2βE_∞ <βq↓↓↓∧εv∂~≤F&.Dλ
t≥~→$↓α@
>x|@@@↓Caae=ae@'∂#∃βCd∧⊗≡(~0↔λ8∧he mode@0XAG←αs;↔∂&+⊃βSzβS#∃∧∧↔ππ-x∞4pp∀e
0≤@sq↓↓↓∧∧v.v↑,⊗fO,≡FN}e`λ∧λ<h⊂⊂H92y`5lpλ@1∧εFFO4∧εn}LX∧}h~{M}{→0∩→β`
AGα{W3⊃∧∧V∂≡≥H∞$Y#"Ggβ_∞ extende@⊂AEKsα{;⊃β&C∃β?L¬Bπ∨
_
D≤≤[l-α2v@, p ↑AαCπ;∪d∧RbεmxD>_;.
α2VεBα the @
←]mSα≠QβC⊗{ &]Pλ¬
α7q`!ti`≥Nαβπ9β,ε6≡∂X ∧{{]M≤⎇λ⊂⊃≡P:0∩aci`≥NβiQJ~(@@@Aβ∪?π∪α4εF*∧λλm}8ε2=90p⊗@∃XR\~(@@@AQQJ@Aβ#↔πT∧ε≡F|∧p∩H⊂:7P≤βacrid¬SGJ@C↔⊗3?K]_L@P0P &lashy demo ∧⊂∀$∧ααεmxD∧\Y0_≤αese@9iS@;8∧π&F≥lw4≥~→$∞X∧st≥⊂;p|Hα; but had p ↑Aβ≠π∂KL∧fN≡T∧ε⊗@⎇~β!⊂⊂⊂⊂≥4π @≥KhAKβ3↔9βλ∧εn89y.⊂22`-onstratio@8Aae←α;@⊗∞β(λ∞:p∞ning ≤@↓αAi@⊗;O∂⊗KC@ Q$ααα
x D∞α42P∀& @5←@∪↔bβ↔≥lrε∂∞λ
≤αr⊂ 4o the spi@1X@Aaβ∪?LX$∧~8 Pλ3tp⊗@∃\@ASαp4)↓α↓απC∧∧Vv&≤ελUβ
λ∧⊂∀$∧αα∧↑hλ-Nαpr4[w⊂7`& RLL
λ∧⊂∀!∀αααλ∧S DβyP⊂≤βtre@9KiQfAIKe%mJ@Aββ@⊗Nβ8<M≥≤∧P⊂→αr`∨Zα↓β'S~↓↓∂|kC↔S,¬f≡ εE⊂λ⊂⊂6wY2p"@A←L@Aae=H∂Kπnk';≥αβπ;⊃αβ?2∧λ
.Nhλ⊂↔]w⊂⊂ $ata qtr`+α≠S@/,Xd∧_;Y↓QHλλ∧8ε3w\αithmpεP→↓h ∩R%$αααλ¬~∞↑h⊂ &∪⊂6w`$els @
C\Ae∃Cg←\αβπ|¬0~λ842`)p∧@A←β;9↓β|εε/⊗≤¬~-⎇@εE∃
∃⊂⊂⊂λ0p∞d↓[C@;Lεπ.f≤LRπεX
.⊂7p↔n da`)∧AgiEUGike∃`
β'p∧ε
πlXO∀→y0↔→y0v⊂≥p|W
0≤@pπbαα∧
FG<h⊂⊂[⊂)&&λ4¬`∨I∃XAGC8AeKCM←\AC ←khAαKSM↓∧¬w>r∧λn<X=
≥{C"Ggβ≠⊂⊂λ⊂0w2λ4¬anipp@3∂#∃β''→β ?⎇`λL=_ ⊂≤βtr`+α≠S@/,Xd
8π⊂ ! rery genep¬C@1∧εv∂Jd∧hR%%"αα∧λ⊗rε←⊗oεLTε}H≥~
≡h→y-l<X;
≡≤∧P )pεAiQ∀AKC@≤∧RαQ'cs@Hλλ∧
~~0→H3rw2\αa`→Sβ#eβ←∂→β∪↔n{;OS⊗S↔⊃∧∧'JπMRε.≤8 $∧β"H∧∧λ≥z.Mλλ⊂≠Z4qt the RLL p KC4~∀@@ACE@≤εG,8⎇→,Dλ≥~Tλ≠;lL8ε⊂⊂≥4π Handl@∀ABAEI←CIKβ⊃β∂3∂≠@~ε|dππ⊗|-F.o5`λ↓QHλλ∧λ9H⊂∩↑0p
pLe of the Mo`if@%CECYαKSeβ|∧bε∞βH∀IIλ≠;lL8ε⊂ )pεAMC
hAiQ¬h@Ai!J@A¬1_∩)α↓↓βS,∧⊗jε=x
-Lβ"OGgβ⊂⊂⊂λ∀0w2λ24r)
eac@%YrA[=ISMr↓iQJAI→_Ai¬`∂-βLsS↔K∧ε&/&↑ π&@h_p∀_w3rP≥42P ,ow
l@∃mKHAα≠?;S⊗{1β?2βS#∃∧k?β↔bq↓αJdaβCπLε2ε6β|@⊂~z9P &lexi@ SYSidASL@↓iKe[L~∀@@AWL@↓caCG∀@AeCQQKd@↓iQC\AiS[∀X@@@4∀p→yβ`ααα¬
FFO4 ↔4→>≤
L8∧w2Y⊂4w Xπ⊂∪↔vQ1αFgπMm∪?S!α1α/3∞CI1α≤¬v 4∀xp∀WTεE∨∂≥⊂⊂⊂λ0p∞d↓aCeI%GkYCISuKH↓S\A↔≥eKS]∃`XA¬1→:\R4∀@@@↓)↑@A=H≠O,εBαπMRαε≤LFO&≥yf∞b∧
7ε∞<Tπ⊗/≤X
.;90↔≥9P RLL
*** has the Capability to igno@IJ@A∪9iKe→αK@∨α}4αβ∪Vi0hR%%"αα∧
7&@|X9lT≠8>
≥=; ⊗λ8¬siNe a @⊃K[C]⊂AaCO%]NAC1K←eSQQZ\~(|p→yα↓↓βW≤∧W4_(⊂∩→vpw2λ80st[3P0v→wy4j~4¬ to
α>x|@@@↓SO]←IJ@A∪9iKe→αK@∨α}4αβ∪Vi2π∨Mz&∞≡T
V∂F≥↑VjR¬
6.*λεtm]=~β∧λstS K+J#!! JJE!(λλ∧λ(≠8--|H≥l\8{Y.≡h≠qD
S∪λ
≡h~=∞P60qZP7s⊂_P⊂:iYy⊂⊂3≤αont-end.
:6. RLL haq several majoR weaknessEq(λAC1XAgi∃[[C]≤AMe←4ASif↓S[@7∂#WKπ'I84'ccrα∧∧∧O'4
F∞≡4
v $_(λ∞↑y<@∧\[{NE9;Y∧∞≤[⎇L\λ_ ∞<<Z;n↑h≠∩-]=_=
≥{KC!$λλλλ≥≠λλ=y→(mβy⊂:~2P9x~v6⊂6[r2v⊂~0r⊂*≠P2w:→y2r⊂~w⊂0@ Lisp-like fh∂e[¬h\
∀@@Aα↓H∂?? ↓β≠K}sQ7↔v!↓β←⎇+3⊃↓εCπ[∃αβ≠π∂Lc'S↔ ↓βS#*↓βOg≥#↔5↓ε#↔O'>q↓βHh)↓↓αβOW∨>+OS'v9βπC∧ε&␈π-≤↔&*L↔&
∞8
∞∞αqz:\2yP0[2⊂0v→wy4`4his.
α[[Xε∪∩AMQSMi∃HAiQ∀A←eI∃`A←L↓iQJA9KqhAQo↑Aa¬eCOe¬aQf\%;; 4hP4))RP%↓↓αα¬βSFKK⊃β>+π/;-≠@~ε|d¬∀dD ↔
ε≡N2αεL≤6Zα
xbαε=yg∨',≥⊗w'5`αH'ccpJ∧∧α¬&
≡2ππ-|&f.T∞v∂~←ε∞yy<L≡→9⊂_<P!&∪⊃yP⊂≠0qu@λ5s⊂⊂_ww9j≤αa`∪]QfP→↓h)↓↓ααS#∃¬∩21↓∧εF.∞T∧ε6@⎇;Y∧∧≥~_.Dλ≥≠mtλ≠=,=λλ⊃N2rr7[P⊂3'\αcedAiQKαi↓βSz↓βOC,s⊂$ α↓↓β∂|¬g=9→4L≤[→(∞M8εrP→2qtb~w3P 7hich↓`↔πd¬GJπ|≡2πεTε⊗/>@λ∞2x92\p¬ftatign
λ∧@@@↓C]H@AG←]Q` >D∧π∂',X7'<Y+D∧λ⊂p↔[p¬ @∃q`∪↔⊗sπ1↓∧∧6}w>L⊗NwN4αε@8∧st≥⊂⊂40]2@
nap¬eO@>+⊃βSF)βO↔∂∪∂!β∞s⊃β#,¬Gε.Dλ
8εP &in`∪GαA↓βSout @QCgWf↓YS@/*↓α←#∂!β'M∧εFF*∞8n↑Xy(
|β⊂:4→P9x )lhλD\4⊂⊂∀!∀ααα
Mε*ε←∞ε/⊗≤XL<αP7`& the RLL p KC4@AoSβ#!↓β&C∃↓β≤εεNfD∧ππ⊗βy|L≥ εE⊂λ⊂⊂4f≠8¬stratedAiQCP@Ak]⊃Kd@AYKer@↓iSOQP@AiS5J@AGα{;OS⊗';S~↓β¬β≤¬⊗oεLXAQHλλ∧
α0w3]psrP≤zqt_yP"fVa`g or LISP c@=kYHAα∂#',εf*π,Z7.gL4εn␈,Tαπ∂]_λmv<FEλ⊂⊂⊂ 4haf RL@_\α↓α'Qαβπ3Oz↓βK↔L¬f&←,8 ,D≥~→-≡H≥P∀Y{P:4_z⊂1:Zv24g→β an↓KqaKβ∪P (αHλ∧∧≤}0→]2p
IpεAC\αβ';∂⊗+7.β]_-D_8λ 0ph∂CG Ai↑Aα≠?7C,εF.v<U`hPβ"VkmDd`3 thi@LA0@=∧∧g-βvP \82w2~|⊂"←H⊂ f nkt, whad↓SfASαqβS#∂!βπC∧∧Vv&≤ε∂a≠4εnFBα ∀@@A/v{←3↔&;∃↓ERα5Y5⊂∧ε&.\N2εNnMr∧keP%@∧¬∀~(∩@@@↓)QS@~βC'↔≤∧Rε@yH⊂∃[5{v %dge @%`
βO&S'
∧[;/←d∧V&>Tλ
=λ⊂→→x92iYw:0∪
λ a pi@∃G@∃β|∧bπεTε'⊗≥_L≤βrP .etwo@IP
β'p∧π&FT
7εNβ≠λ∞∞Yx[]+Hλ ≡λ≤p/≡h≥~≡β"H∧∧λ≤⊂∀\2P&KY⊂3 %e` fAαK;C=∧εεOεT∧∧k∩T∧ ⊂λ4p∞ the netgop¬V@9ααS#'α4αε↑mx
mL9→y!QHλλ∧∞{y0⊗→⊂⊂12H⊂:y`%d to he`→@↓IKMSαs∃βSF)βC?∧¬vf@yxP≠pε the d`%¬S]CO∀AP≠↔';?K1Q"αα∧
6zε≤@λ=⎇;⊂∩λ12P 3earc@!K@@8hP4(∀∧αα¬)IBα¬,Zπ,<y0↔≥0z4`/n. This is Handl@∃H@Ao%iQS\α↓β@&Tαπ8π4`4pε~)α↓↓β≠⊗7/⎇xMT∧ @U`∂'lpλ∧∞αp∞i@Q`
↓β&CπQ↓∧ε&/π,Xl]]λ∪&E,+β!∃∃∃⊂λ⊂⊂&@6-2 the "f@∃K@∪M∧¬⊗wεt λ∞2r0z~ww⊗⊂_w2⊂ 4he manhol@∀AG←]
Kah\4⊂ `3βH∂ MXZdXAβ##∃↓⊗3↔.L4εNwMt"π⊗]Hλ.M9{@⊗λ0p∞d↓c@↔Q∧¬v $_;⊂⊗λ842P≠pp∞holes.
λλ
(J↓↓↓αhεbk⊂β"B$∧λλλ∧ <x ≥λ⊂⊂⊂⊂λ⊂⊂⊂∀⊂w<fp[47v %)
∀∩@@@@↓
KKIM∪]i↑h@@@Q4lZbR4⊂λ (αB(∧∧λ∪ ≠X@
Isah@@@@@@@@!β]s≠¬]Q←Yα)$4!∀ααα∧∧∧6.\N47⊗β{ ≥λ⊂⊂∀&M⊗Y∀FB∧¬∀∩@@Aβ9s⊂↔πvC?3∀hP%↓↓α↓↓α↔F7C3,ε3@$λλλ¬ -K _K⊂
,4dR4PI↓↓↓α↓α&↑8λn4x:4[w_
The c@1CgfAα{⊂∩ε≥H∧
8;Z
⎇→<kAQ@εE∧H⊂⊂⊂#→pr0∪Inpo
@∪@≤∧∪@$λλλ∧∧λλλ¬λ9↑4mM⎇
#!∧P⊂⊂λ⊂⊂"2\βcri@AiS@?qQαS#Lε2π≡Mx
∧
αpp⊂@LAMe←αiβ .≥mε}f↑4π&@h≠8-m≠{⊂∩\β(4PI↓↓↓α↓α'nhW.y*H∧∧λλ⊃L\9_ c≤αh∂Z~(∩@@@@A Kα3';≡M⊗}sαHλd∧i`'β↓β∂?&)βC#∂!β'lM⊗≡∂LXd
≠x@≥4π dedqce the @YCYkJ4⊂ ))PH$%↓α↓β >dλ
(≤p⊗≠z⊂ @∀X≥eDπ&FTλ,≥X∧7`,e i`(αβ7πC~β';Szrt4'`∂Ga ∧DPλ⊂⊂7`& p QJ↓
KKIM∪]i↑↓`∂3?α@∞}H≤p↔[p¬ manhol@∀XAR]∀X 04Sqy`0α""$∧λλ⊂~~2P6p[47v % it @5CafAαK;@&ukPhPβ"C!⊂⊂⊂⊂∩w0∂`/1K@∪∨*↓Iiα∞c1αC,ε&n∞βY0↔≥⊂)z7\αage Ta`≥WLAβeJ↓ S@/,∧B`!α@
Thi`&↓P∂;|¬{\α3rP_pp∞ be @IKaeKβ≠↔;S,∧Bαε]_
<Hλ∞≡_8
4Xppl@d@A←@⊂h ∩α∧∧ππ⊗|8 ,Nαy0v≠<P⊂ !nd @5KC@;~↓β@&≡Bε∞β≠λ∞M→(⊂_→y0
anent @MiP∨K∞;∃βS∞s ∨~
↔6(β"H∧∧λ≥x-Mα9P /p∧AISβ#∂#↔~βS :
_Nzy2P≥40p∀↓`∂C'd¬G4≥z0⊗≠⊂12P_ww:0Zw2r.
~∀(TT%α↓↓αJdaαK↔∧ε&/≡]nF∂&≥xE@⊂⊂$`. RLL thi`&↓o←kYα!β∃∧ε&/π,Xl]]→0∩λ0yFE∂≤ε0≤∩@@A∀b1αK,επ,<y0↔≥0z4`/n. One way to p¬Kae∃`∂↔n@λ∞M~8 P~w⊂ ∩LL involve@L~∀@@A`∪←zβW;≤N3@$⊂;↑*>≠x 0Yβ`)C9P
βπv!β¬β,¬fO6↑.6∞b∞hλ.4pq6→P⊂λc@¬YP∪↔ ∧πBJaQ hPα(λ∧∧⊂;↑*<[8-l8π:)]4πrageP C],~∀%α↓↓↓↓∧#↔O∂⊗KC@&≥xD∧λλλ∧∧λλ∃
(_p⊗_yyP /d∧ACYαaβC↔⊗kπ;↔w!βOS|ε&∞y(⊂~_w0s.
∩@@@@AU]Smαc↔7↔w#@≠R∧∧ααα∧¬πBHβ"C!∧¬∀∩@@A@h ⊂J∧∧αααλ¬0↔~{$p∪@∧p ↓↓α↓↓↓↓α↓↓↓↓D;fC,ε&n∞βY0↔≥)z7`2a`∂K&;-⊃Q Jα∧∧αα∧←_F.X∧w4[3iv /ts: ⊃.s'Z'α8λ$
~;9)@pεStop¬COJ$~∀%α↓↓↓↓∧kfπO≤∧W.α4w`.alSl@=ift@! S@/,∧CzHβ"JE%@∧P⊂λ⊂⊂⊂"→yqy4\84w`.8∧@@@@@@A¬YP⊃β4∧⊗∨'4λnMβy2`$ here are true d¬P∨I∧∧⊗f@β"OGgβ Descrippio@8p ↓↓α↓↓↓↓¬##∃β4∧⊗∨'4λnMβy2`$ here are true d¬P∨I∧∧⊗f@β"B!⊃ ∧P⊂≤2y6p[2p∞t↓`∂S?⊗↔*∞L⊗v←5aP@!(λλ∧∧λ∃~-\αgs)]4πrage: @@∃` .≥lVwQ!∩αα∧∧α∧ε≥<V#{$∧ααα∧∧ααα∧∧α¬ Q!PBα∧∧∧↑vβy{\α3rP]⊂$`& The @πQK[%GC@1∧K@~∧α⊃K↓Q@∧DP∃42w Te`→X↓)QJA=EgKeYKdA≥=hA)↑↓K↔∂##∃αLεB`!α@
Thic hπ]OO1K@∪∨*β'Mβ≤¬F.∂/∀ππ⊗|8 ,Nαy0vλ⊂0w2λ⊂4qPλ0s⊂⊂~vx7`2ta`≥h4⊂@@@↓oCe]%]NAi!ChAgαC?W∪ ∧ε⊗*⎇↔6.dλ↔4≤{p↔[⊂0yP≥42P!Z2p
i@
CXASβ→β'∪,¬g&Nm_V"pβ"C!↓(λλ∧
S∪λ
,<≤Y.≤αs:0]4p∂n∞ The iff@=aP↔π&K?9β≤∧⊗rε,Tπε/∞,W<αs:2Y⊂0yP_w
BLL ru@1JAC@~β@≡F}⎇bε⊗]HnwA"C!↓(λλ∧
];⊂∩Hβ33 $4⊂∩@@@@A∪MBt@@@@@@@@@@@Qβ]e%`↔3*H4(∀∧ααα∧ ⊗5',YGM⊗]LW6∞nG"αα¬λU
αx8
]88x-D∩⊃J%⊃ B(∧∧λλλ
M→;U]≠∃<l↑NHλ∧∧λλQ
t≠[u∧\Y8.M→(∃
(_p∀→vpqp[⊂PQεB∧P⊂⊂λ⊂⊂( 2ioriTy: High
∩@@@@A=])CgαYi↓↓α↓↓↓↓α↓↓α'nk';↔w"∪πl|W@ C"GgMHλ Mβz2P≥42P:[4z⊂ !bkve pπQ←oLA←]YdAoQCPAiQJ↓kgKdαβ←?Wd!β#π4∧Rπ&tλ
]≠λ∀IIλπεE∂≥≠⊂⊂∃42P9↑yz2fH1pw≠7{P![vx:j→P:42H;0v:YP37`2 iany additional slOts as neeDed&
>:> The varaouq slots which stkre exec@UiCEY∀A→∪'@AG←I∀~∀|@qq↓↓β≤¬w.Y<t
⎇Yλ∃
t≥~→.<αP22Xv0y0]4ww9JP0y2H1wvx≥z2r in this way.~∀4∀⊂≥I8j?∂QiAE↓↓λεC#@≥\↔πJ≡B¬∀→hBm,i≠αM,Xf/⊗]l6/~↓Q%&{$
$$h_=∧
u+0)⊃ ¬!`#8∧A[CIrACHααJε: jV:&@h($
↔+GO↔d¬B∧∨,X
-l<NC!! ¬⊂⊂λ⊂⊂⊂⊂λ$p∞ @QQJAGα{@↔⊗\8
≥{\hmβy⊂"≠w⊂+p]2y6p[∪yP2≠qzvr[8∩⊂,[zP6pZr@
re@→KeK]
JAi↑↓'[Ci XAπ∨I→_@9αα∪ :∂→w*ε≡f*πMRπ>
xQ B0⊃Zz0z4[w⊂3 /p∧AiQ∀AaCaα+A`:∧
FF∞m>2`HαC"A⊃ "3,≡↑(⊂.D∀X;LE5;Z/↓ ¬εEβj#P&Pi( @Rand-Unix 14:3827-O@
h~*≤zJ21∧εε∂ε↑!PEN|Tππ⊗|,⊗⊗g∀λ
l≥]λ⊂→[vrP)]q9r`4 h∂LAβ##'MPh $
≤k'S!bα∪π[L∧B∧*eDα∧≤z)Db∧β8;N\9λλ∀∀⎇≠n9y(≥Yλ⊃M≥→(∪,≥X9y-\αs: System
∃M=` α∂v{←3↔&;∃α∂≠↔M bαOSπv3?K⊃∧C↔WKM≠S'
¬βC >|,⊗nn≥lr¬π-x
L\⎇β!)9;;d ∀⊂λ⊗N_∩P_(Working Paper$XA
←β3↔7,ε"β↔αα`@ ¬-@11 pages]
Anything e`→gα)α%β≤∧⊗rπ∞-w6NLWphPβ"TN↑|c"@↓H(≠⊂∀\βt o@_A`∪#|ε6*ε≤LFO&≥xL≥λ≥P⊂[8¬es whic@ AOKhαβCπO≤∧V"πMqP@!1y0~∃αa`→@,∧Rb¬∞X
@0p`+α)βπl@λ@90 e@9If@8hQq`#H|W$X∧r`,d and PutFi`@3 ∧π>Nβ≠λ∞www have a si@5SYSCHAQS@≤εCs@LπεEβE*42H8∧hi@IHACE≤A`∪=∧;↔R[∞cW*¬Pλ∧4πthep∧DASαqβ .β|p~λ3:w1]4p∂ns - i@LAC@9∧εVv@|Y→.2r⊂ ,ist
(actualli an FSet ∩Aβ;# ?<Tε.f]\Vw≤h⊂⊗X|P12Nαλ
(hQ↓↓λh∃≥λεa`PβHE @LbAf@⊂¬0∩rdλi@∀P⊂⊗KP:44\β caupπ@↔M∧εFF*≡F}jλhλ.z⊂
C@¬GQJAβ#=β*βCπO≤∧V @ ¬∧`4o CacheValu`
XAα{9β'αN2α↔⎇∂∩$≠~0→]⊗⊂3 /p∧AKC
PAgYα{Q1β≤¬∩`!αE⊂∃¬0p0iλαP9XH9Y⊂↔α. sN) ~Zα↓β@&]H∞P:42H3rz-va`→kα+@~∧βSu∧∞α7P #ache the @
←[akβ#↔ Q!↔6∞β≥0∩H4πf @¬]rAgαc?Qβ≤¬∩`!αE⊂⊂
⊗agfT*j"P≤β1 s2 ...↓`∞ 2∀∧αααβ+ ≡M→(⊂∪Yz⊂
v@¬Y`↔↔~β←'MDεv@⎇λ⊂⊃≠z42`2 computing p QJ4⊂λ'[∞cW*
x D8π<P≤βlt @MRvASα1β@&Tπ6∞β≥0∩H4yw't stoped, h¬`↔O ∧ε -βy3r]⊂4p∀∞
(IG@≥∨I
P⊗∞~"*∞6∩π≠$¬b`%H≤sE∀λεV@=42P 'et ≠mα3@.↑4π>Nβ≠λ @'j⊂ 5pπ@∃β&C∃βO&{@⊗.Dλ
L≥≥9#!∧p∂f any @MYP∨Q∧ε6Jαβ+ ⊂_8¬t @ICiQKβ⊃β@>≥H∧{{<∞↑→(⊂~~4πse va`→@.+@~ε≤∧h
l99→,E@εE⊂λ∀)`c⊃i`OT s1 @Ld@@9p¬bπ≤βJ(¬UαP2`!ch s@$AeKC1YrASβ→β¬β≤¬F␈#4λmt→≠p↔ z⊂17]42y=4π
confir`~Aβ##'Mph ∩α¬
44X¬3I~α⊂:XH8¬2 .,∧\Ak8R@@5h∧ε.∞=∂.J
_d∞Y8;
O(_ ≡]X∧p∀8~∀ZZαh4*@9mw&* ∀ε∞j∞N'NNβY`≡MβP0r≠x:⊂ 4he c@=]`≠↔w#'?9∧εFF∂DλλM≥X8 <H1ww2~z4w`.pεAEJ↓S]ISα≠πS↔ h ∩ε,ε(∞↑z;Yd∞{{9$
β0vrK⊂892Yαixe@⊂AEr@,AP∨Iαi1β∪,εε.vM_L@P7w pπ@↔n8 %@⊂⊂$`. genep¬C@1∧¬vv@≤∧FEλ4πne d¬P∨Kh∧αF.tλ -≡~→0→λ∃oooH4πr -←←←) wi`→X↓EJA]∃G@↔O≤∧↔/+λ⊂⊂\β the h∂iQ∃` βO,¬g<αP4`3
the o`-α+@⊗∞β≠λL9X=-Nα⊂∞ Fh∂dAlExamples will be ignored for all
units U, but that V:AllIsas will be accepted EXCEPT WHEN V=AnyFrog.
I cuurently have no use for such a "feature" - do you?
Another direction may be to have forms which are evaluated during the call,
will appropriate bindings --
(GetValue 'Fred 'Friends '((IGNORE-CACHE =Fn fn#37))),
where this fn#37 will be applied to the unit and slot being considered at
each (recursive) call to GetValue; and its values would be used as the set
of slots whose cached values should be ignored. A slight variation of this
would be something like (... ((IGNORE-CACHE =Pred= pred#82))), where pred#82
would be a predicate whose nonNIL response meant the argument should be
"ignore-cached". Once again, this sledge hammer may not ever be really needed,
but it has been considered.
Future directions:
(I'm sure I will need more of these values; but am waiting for a forcing
example before implementing and documenting those options.)
(i) (USE-VALUE (u1 s1 val1) ... (uN sN vN)) meaning "pretend"
the value of ui:si is really vali -- don't bother to compute it.
(ii) There's also some hassles when dealing with those *DO* special
values -- should they be treated as simple "syntactic" values, or
"evaluated" -- ie how do I store the "value" (*DO* FSeeUnit SofU)
as U:S? As I said, more on this as this comes important -- unless
you've some insights on this whole can of worms.]
-------
Onto the putting functions.
There are basically two types of values. I'll resent the primitive ones first:
The final argument is a set of zero or more elements, each od the form
[These apply to any of PutValue, AddValue, DeleteValue, SubstValue]
-VERIFY -- there is no need to verify that this value is appropriate, or
that this slot belongs on this unit. (Yes, this may indeed be
confusing two distinct functions. Eventually I worry about this,
if I have to.)
-INVERSES -- do NOT now add on inverse links (this is useful when this
particular PutValue was itself adding backpointers. If not for this
facility that process would always lead to an infiniTe loop...)
-DEPENDENCIES -- do NOT do the other misCellaneous KB updates which result
from thiS modification.
[This only applies to PutValue]
+ALWAYS-UPDATE -- go thru the motion of adding inverse links, and other
after-put-value functions after performing an update -- even if the
value seems NOT to have changed. (Ie pretend the old value was really
RecomputeMe.) This is needed to handle the case of unit
iniTialization, when valuas are fIp¬ghAMS[aYdA+α[A+)-β1+HA=]i↑AQQJ@~(∪kMSβ!1βπv!β3π&+Iβ#∂3∃βSzβ∃β∞≠S@.≥MGJ¬∞ZE ,9≥9%\ C"AQB6u
<y(
⎇[≡(≡≤≠⊗$∞≠h⊂,L∃X;∞\+λ⊃]→=→*l9→1%D H∀n\\⎇∃L≥≥97!QHλ
h9q4∃*H+23I~⊂∧`fλ⊗VP+Z0z⊂)Z5zv"λ<wp∃ do when you've been th∂YH↓iVAC⊃HA←\↓B~∧∪9KnAm¬YcJX↓,XA←9i↑A*i&AoQ∃\AiQ∃eJASβ→β;≥¬3π3W*β? α+RM|4PJS#↔⊗)βO↔,iβS←zβC?O≤K'3M#'πMβ!P@Jε∃∩ε&tλW6//_
9Y`⊂≡wzP!Xw⊂:7H1wvx≥z2P*~2P;0[:rP'Yα U*S,
α and theN addon V.
∩Pβ⊃%βOLkC3e∧;=β?pa↓#3.['≠8∧¬+U4
Vv≡⎇↑π/&\@
$∞z=~∧∞~→(≡|⎇4L≥Xy(∞M_=β!↓(λλ≥↑(∪ml(→P→≠vP77]P7w≥t7P 7ant`&4⊂∩@@↓iP≥β4¬⊗v"∞Mε*πl≥G.(≠p∪λ*Y)P≥tpl qpec@%H'∂∞c3eβ∂≠ ~εmxD
=λ∞↑z;Yd↓ ¬∧Pλ⊂#r`4T¬C@3αX 'P;t4Xt⊂;t[4∧ now have to compUte i@PXλ (αB(∧∧∃~→$<|p→]vx:4[w⊂4`3 phat S:To@π←[aβ+S∃β>K3 "
mw:ε<≡F≡B∞MεO~
lW:¬eaP@L≥o↔>∂∃DεO"∞NW-β9P']z⊂:4_z⊂17]4⊂7`& phe@MJAGCMKfAGα{7*∞X∧¬+(⊂∀→w1rP≥44p∪
λ extp¬BAaα@⊗∞β90~→y↔εEαm`∞o@QJA%∧∧&.f≤X
LT≥~→$⎇<\L]]λ⊂_≤4πgrams wilhλAC1oCsF↓G←[aβ+S∃β&C∃β[∞cW*
_ D↓α@
@QQJAgαc?QβO→βCKL¬VO&≤h $¬+(⊂⊂\β thipεA[Kα;Mβ&C∃β[∞cW*
_d Xπb`.try @=` 4PJ0⊗@q;]∞4ryVλ22x %nding h∂\Aβ##∃β4¬w-αpr o`Ai!JAgYα{Q9↓¬##'M∧¬↔4≤≤[l,8[⊂≤H∧¬∀∪β##∃β?∪?;≥∧∧↔ππ-xλ,=λπ↔.]
∀@↓_ 6[∞cW/4¬Rj∧α;@⊂→β`@;,ε&∞b
xLT≥x;NNh≥≠d9→⊂≠w⊂5 5qt o@9JAmC1k@∃1¬11βSzβ¬β[∞cW*
x AQ@∧j]∀Tε Howev@∃` βSF+C∃β∂∪∃βSL¬V/~
xLT≠8>$∞βpw:λ87P !dd a↓`∂3↔8∧ε}H≡uM∨β⊂0zβE o@9G@∃9ααS#∃¬βWKC|ε6*ε|dπ&F≤∧h∞l8ε0∃@∀ASfAβ#=β∪Lε7&NβY⎇-≡zλ⊂~~2yrP_pyr`3,∧⊂∀!→f␈&Tλ
<h⊂∀\β we@1XAIKα3';↔ π⊂⊗@|H⊂⊃≠z4⊂ Y2+0v≥p¬ and De@1KiK4∧⊗g9(
@ bph~(∪[C@Jβ3↔π ∧π&@h_p↔[3:y`)on f@=` αO,∧'∂%l≥G.+λ⊂∀Yα we wa`≥hαβS :∞,Wε@_8p∩H'⊂; !lpKf4⊂λ'←LεFB∧β(⊂≠_v:r`3, when @≤@p|A5p∧α∧}dλλm}<X `% p∂JAαkπeβ≤¬⊗oεLε(,<H⊂~~4yP /peration
i`≤Aα;↔;↔⊗18Q!PBjUP%U+#"I@4πw @→←dAi!JA←@&C↔Iβ'KC∃β|∧bπX;⊂~YyP∞ Firc@PXAE@Jβ←πe∧¬v $≠;p~~{0p∀ion, @¬`∂,4TεvGJλ∧⊂~]+0v 5e should @-]P∨]∧∧⊗wOM
⊗v:≤&␈/Dλλ,L~;Yd
8π; %p¬gKf|@A%>c0 (αX9n2rP 4hat De`
C@,¬G%π↑Jf∞g\Tπ=≠x
`,d, but things @¬hAiQ%`
β3,εf.b∞8
}8ε2 be tota`→YβH4+≥nfO≡≤-F*πMtπ&FTλ l]Y<X-D≥<p∩\α-`→Kβ3↔1β5+;∂SL¬vw~βHλ ≡λ≤p∀≠zpd↓EJAgβ+⊂⊗6≤8
,]]β"NMβP:2[4∧ @!β+R[πdεV*πM↔"π|Tε∂⊗TλM}h⊂9M8π3d[8εerses _Aα;⊃βv{S#'v9β .βx 2Kαλ
*&C∃β≠,¬f∨&≥xNP;t4Xt⊂ 5tVal@UJAGC1Yf@1∧ε7.≡∧λλ.P"2`&au`→@%βWR[∞cW*Dλm
βzv $
`≥←β9β'lh .⊂:40]⊂:44\β me@¬]fA]=hAi↑↓C@∪⊃∧¬⊗wY<\lT≤≠p∀[8∧ers po @QQKgJ0@\\\4⊃)QSβ→β'↔∧c'/4λ
lT≤z≠n]→λ⊂__yyP+_v:riH44urH r2$[8εerse in↓iQCHαβ↔cS⊗ βπK?+7πnA`hT
x
l↑Y<@⊗λ842`2e a`%∀AaS[∃`
β'w#↔Kl≥Bε7]l7&Nβ{\d∧X¬w7]Q⊂;t_z⊂4iH4εee@⊃KH@ZαiβπlAP@.βt<P≤t7rf→⊂:42H5z42\⊂3:`.ctio@9`
β≠|ε&≡(≥~](≥≠d∞_8p→H:42`3e indirec@PAeCYUKf}~(~∃'←1kiS←8pAβYαc?]β.KS#↔⊂∧π'OTπ&@h_Y$∞_<p→Yr⊂∞
Of course we needa table which @IKYCi∃`
βSF{G*∞λλ.0p
e@QKefAβ;'S!∧εvF∂Dλ
>(⊂→→pr6,CE0
e@¬\@@5hh $ε4∧W-9↑/a⊃2;]L↑\y/a_→<⊂∩[22w1Zp¬s >4∃≥KnαjW;≡A∩αααhλ↓⊃(λ
aQRp@⊗Pww9d\βtency ∩∩$∩@@V4⊂
π∪$K;@6↑.6(H⊃⊃⊂Jα¬1P@(α2v %teInverse ∩∩@V~∃IK[@?4¬⊗v<mxL]9{Y.∞b""!∀λ
c!
8π4`4Re`≥C5K@∩∩$∩∩@@,~∃+]%i∪↔d∧W&.A⊃⊂HHα(λ¬1 O⊃\X8
`,t8%α↓,$∀∧αXHα(λ¬1"C"Kd∧egend: @QQJAC `∂.β\p∩H4πf @∧@DVDαβ7.≥n2αm{{uz@λ→P↔\α parametep∧A??|}ACE=mJ]~4∃)QSLAG←]YKegSα{9βS∞[↔Mβ∧¬F∞≡Tλ
-d⊃→0∪_zr0∀←←←Valu`
X@4⊃M@?⊂∧¬⎇⎇tλ
-d≤¬` 5t Add @ KYα+S∃α≤εV↔∨M`D∧λ∧$w→2y4`/p∧AMkαs∂S'|¬g4≥z0⊗≠⊂0p∪@Mk[JAβ##↔dhSπK∃∧;↔SSL¬f 4≥~→$
8πq2H894fZz4s % f`∨e5b\R~(~∀